Questions tagged «jit»

即时编译(JIT)是一种用于通过将解释的代码转换为机器代码来提高其性能的技术。

10
为什么2 *(i * i)比Java中的2 * i * i快?
以下Java程序平均需要0.50到0.55秒钟才能运行: public static void main(String[] args) { long startTime = System.nanoTime(); int n = 0; for (int i = 0; i < 1000000000; i++) { n += 2 * (i * i); } System.out.println((double) (System.nanoTime() - startTime) / 1000000000 + " s"); System.out.println("n = " + n); } 如果我更换 2 …

12
如果PyPy快6.3倍,为什么我不应该在CPython上使用PyPy?
我已经听到很多有关PyPy项目的信息。他们声称它比其站点上的CPython解释器快6.3倍。 每当我们谈论诸如Python之类的动态语言时,速度都是头等大事。为了解决这个问题,他们说PyPy快6.3倍。 第二个问题是并行性,臭名昭著的Global Interpreter Lock(GIL)。为此,PyPy表示可以提供无GIL的Python。 如果PyPy可以解决这些巨大的挑战,那么它的哪些弱点正在阻碍广泛采用?也就是说,是什么原因导致我这样的人,一个典型的Python开发,切换到PyPy 现在?


2
运行JDK代码时Java JIT是否作弊?
我正在对一些代码进行基准测试java.math.BigInteger,即使使用完全相同的算法,也无法使其运行速度与一样快。因此,我将java.math.BigInteger源代码复制到自己的程序包中并尝试了以下操作: //import java.math.BigInteger; public class MultiplyTest { public static void main(String[] args) { Random r = new Random(1); long tm = 0, count = 0,result=0; for (int i = 0; i < 400000; i++) { int s1 = 400, s2 = 400; BigInteger a = new BigInteger(s1 * 8, r), …
405 java  jvm  jit  jvm-hotspot 

3
.NET JIT潜在错误?
当在Visual Studio中运行发行版并在Visual Studio之外运行发行版时,以下代码给出不同的输出。我使用的是Visual Studio 2008,目标是.NET 3.5。我也尝试过.NET 3.5 SP1。 在Visual Studio外部运行时,应该启动JIT。或者(a)我缺少的C#发生了一些微妙的变化,或者(b)JIT实际上是错误的。我怀疑JIT会出错,但是我没有其他机会... 在Visual Studio中运行时的输出: 0 0, 0 1, 1 0, 1 1, 在Visual Studio外部运行发行版时的输出: 0 2, 0 2, 1 2, 1 2, 是什么原因? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { struct IntVec { public int x; public int …
404 c#  jit 

5
JVM为什么不缓存JIT编译代码?
Sun的规范JVM实现对字节码进行了一些相当复杂的优化,以在代码运行几次后获得接近本机的执行速度。 问题是,为什么不将编译后的代码缓存到磁盘上以供以后使用同一功能/类时使用? 就目前而言,每次执行程序时,JIT编译器都会重新启动,而不是使用代码的预编译版本。当本质上解释字节码时,是否添加此功能不会大大提高程序的初始运行时间?
107 java  caching  jvm  compilation  jit 

8
JVM的JIT编译器是否生成使用矢量化浮点指令的代码?
可以说,我的Java程序的瓶颈实际上是一些紧密的循环,无法计算一堆矢量点积。是的,我已经进行了概要分析,是的,它是瓶颈,是的,它很重要,是的,这就是算法的方式,是的,我已经运行了Proguard来优化字节码,等等。 实质上,这是点产品。float[50]与之类似,我有两个,我需要计算成对乘积之和。我知道处理器指令集可以像SSE或MMX一样快速且批量地执行此类操作。 是的,我可能可以通过在JNI中编写一些本机代码来访问它们。JNI调用结果非常昂贵。 我知道您不能保证JIT将编译或不编译。有没有人曾经听说过使用这些指令的JIT生成的代码?如果是这样,那么有关Java代码的任何内容都可以使它以这种方式编译吗? 可能是“否”;值得一问。

4
什么是循环反转技术?
我正在阅读一个文档,该文档讨论了Java的即时编译器(JIT)优化技术。其中之一是“循环反转”。文件说: 您将常规while循环替换为do-while循环。而 do-while循环的中设置if条款。这种替换导致更少的两次跳跃。 循环反转如何工作以及如何优化我们的代码路径? 注意: 如果有人可以用Java代码示例进行解释,以及JIT如何将其优化为本地代码以及为什么在现代处理器中是最佳的,那将是很棒的。

5
C#JIT编译和.NET
我对JIT编译器的工作原理有些困惑。我知道C#可以编译为IL。第一次运行它是准时的。这是否涉及将其转换为本地代码?.NET运行时(作为虚拟机吗?)是否与JIT代码交互?我知道这很幼稚,但我真的很困惑。我的印象一直是.NET运行时不解释程序集,但我不了解交互的详细信息。
86 c#  jit 



8
为什么运算符比方法调用慢得多?(仅在较旧的JIT上结构较慢)
简介: 我用C#编写高性能的代码。是的,我知道C ++可以为我提供更好的优化,但是我仍然选择使用C#。我不想辩论这种选择。相反,我想听听那些像我一样试图在.NET Framework上编写高性能代码的人。 问题: 为什么下面代码中的运算符比等效方法调用慢? 为什么在下面的代码中传递两个双精度值的方法比在内部传递两个双精度值的结构的等效方法更快?(A:较旧的JIT对结构的优化效果很差) 是否有办法让.NET JIT编译器将简单结构与结构成员一样有效?(A:获取更新的JIT) 我想知道的是: 原始的.NET JIT编译器不会内联任何涉及结构的内容。给定的奇异结构仅应在需要小值类型(如内置)进行优化但适用的情况下使用。幸运的是,在.NET 3.5SP1和.NET 2.0SP2中,他们对JIT Optimizer进行了一些改进,包括对内联的改进,尤其是对结构的改进。(我猜他们是这样做的,因为否则,他们引入的新Complex结构会表现得很糟糕……因此Complex团队可能正在对JIT Optimizer团队加紧努力。)因此,.NET 3.5 SP1之前的任何文档都可能与这个问题不太相关。 我的测试显示: 通过检查C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll文件确实具有版本> = 3053,我已验证自己具有更新的JIT Optimizer,因此应该进行这些改进到JIT优化器。但是,尽管如此,我的时间安排和对拆卸的观察都显示了: JIT生成的用于传递具有两个双精度的结构的代码的效率远远低于直接传递两个双精度的代码的效率。 JIT生成的用于struct方法的代码比通过struct作为参数传递“ this”的效率要高得多。 如果传递两个双精度值而不是传递具有两个双精度值的结构,即使使用乘数(由于明显处于循环状态),JIT仍会更好地内联。 时间: 实际上,看一下反汇编,我意识到循环中的大多数时间只是从列表中访问测试数据。如果不考虑循环和数据访问的开销代码,则进行相同调用的四种方式之间的差异将大大不同。对于PlusEqual(double,double)而不是PlusEqual(Element),我得到5倍到20倍的提速。10倍到40倍用于执行PlusEqual(double,double)而不是运算符+ =。哇。伤心。 这是一组时间: Populating List<Element> took 320ms. The PlusEqual() method took 105ms. The …

2
为什么递归调用会导致StackOverflow处于不同的堆栈深度?
我试图弄清楚C#编译器如何处理尾部调用。 (答案:不是。但是64位JIT将执行TCE(尾部调用消除)。有限制条件。) 因此,我使用递归调用编写了一个小型测试,该测试打印了在StackOverflowException终止进程之前被调用多少次。 class Program { static void Main(string[] args) { Rec(); } static int sz = 0; static Random r = new Random(); static void Rec() { sz++; //uncomment for faster, more imprecise runs //if (sz % 100 == 0) { //some code to keep this method from being …

7
Python 3解释器是否具有JIT功能?
我发现,当我向Python提出更多要求时,python不会100%使用我的机器资源,而且速度不是很快,与许多其他解释型语言相比,它很快,但是与编译语言相比,我认为区别是真的很棒。 是否可以使用Python 3中的即时(JIT)编译器来加快处理速度? 通常,只有JIT编译器才能提高解释语言的性能,所以我指的是这种方法,如果有其他解决方案可用,我希望接受新的答案。
71 python  python-3.x  jit 

9
即时编译与提前编译相比有什么优势?
我最近一直在考虑它,在我看来,赋予JIT编译的大多数优势或多或少应该归因于中间格式,而自动拼合本身并不是生成代码的好方法。 因此,这些是我通常会听到的主要的准JIT编译参数: 即时编译可提供更大的可移植性。那不是中间格式吗?我的意思是,一旦在计算机上安装了虚拟字节码,就没有什么可以阻止您将虚拟字节码编译为本地字节码了。可移植性是“分发”阶段的问题,而不是“运行”阶段的问题。 好吧,那在运行时生成代码呢?好吧,同样适用。没有什么可以阻止您将真正实时需求的实时编译器集成到本机程序中。 但是运行时无论如何只能将其编译为本地代码一次,并将生成的可执行文件存储在硬盘驱动器上的某种缓存中。当然可以。但是它在时间限制下优化了您的程序,并且从那以后并没有使它变得更好。参见下一段。 这也不是说提前编译也没有优势。即时编译具有时间限制:程序启动时,您不能让最终用户永远等待,因此需要在某处进行权衡。大多数情况下,它们的优化程度较低。我的一个朋友提供了剖析证据,表明内联函数和“手动”展开循环(混淆过程中的源代码)对其C#数字运算程序的性能产生了积极影响。在我这边做同样的事情,我的C程序执行相同的任务,没有产生积极的结果,我相信这是由于允许编译器进行的广泛转换。 但是,我们仍然被固定程序所包围。C#和Java无处不在,Python脚本可以编译为某种字节码,而且我敢肯定,还有很多其他编程语言都可以做到这一点。我想必一定有一个很好的理由。那么,什么使即时编译比提前编译好呢? 编辑为了消除一些混乱,也许重要的是要声明我全都是可执行文件的中间表示。这具有很多优点(实际上,大多数实时编译参数实际上是中间表示的参数)。我的问题是关于如何将它们编译为本地代码。 大多数运行时(或与此相关的编译器)宁愿及时或提前编译它们。由于提前编译对于我来说似乎是一个更好的选择,因为编译器有更多时间执行优化,所以我想知道为什么Microsoft,Sun和所有其他公司都朝着相反的方向发展。我对与概要分析相关的优化有些怀疑,因为我对即时编译程序的经验显示出较差的基本优化。 我用了一个例子与C语言代码,只是因为我需要的例子名列前茅的时间编制与刚刚在时间编译。C代码没有发出到中间表示的事实与情况无关,因为我只需要证明提前编译可以产生更好的即时结果。
69 compilation  jit 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.