2016-08-02 105 views
1

我听到有关Octave的实验性JIT编译器功能的非常矛盾的信息,从“它是一个玩具项目,但它基本上不起作用”到“我已经使用它并获得了重要加速”。Octave JIT编译器。当前状态和最小示例演示效果

我知道,为了使用它成功的一个在配置时需要

  • 编译倍频与--enable-jit
  • 启动倍频与--jit-compiler选项
  • 指定在运行时JIT编译偏好使用jit_enablejit_startcnt命令

但我一直无法令人信服地重现效果;不知道这是因为我错过了其他我没有意识到的步骤,或者它对我的机器没有太大影响。

问:能否成功使用该功能的人可以提供一个最小的工作示例,以证明其正确使用及其对机器的影响(如果有)?

回答

7

简而言之:

  • 你不需要做任何事情来使用JIT,它应该只是工作,如果它可以加快你的代码;
  • 它几乎没用,因为它只适用于简单的循环;
  • 它仅仅是一个概念的证明;
  • 目前还没有人在改进它,因为:
    • 这是一个复杂的问题;
    • 它主要是修复马蹄形八度码;
    • 使用LLVM太不稳定。

问:有人谁使用成功的特性可以提供一个最小的工作示例演示的正确使用方法,并在其计算机上造成了哪些影响(如果有的话)?

没有什么可显示的。如果您使用JIT支持构建Octave,则Octave将自动为某些循环使用更快的代码。唯一的区别是速度,而不必更改代码(尽管你可以在运行时禁用JIT):

octave> jit_enable (1) # confirm JIT is enabled 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.00490594 seconds. 
octave> jit_enable (0) # disable JIT 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.747599 seconds. 

## but you should probably write it like this 
octave> tic; x = sum (1:100000); toc 
Elapsed time is 0.00327611 seconds. 

## If Octave was built without JIT support, you will get the following 
octave> jit_enable (1) 
warning: jit_enable: support for JIT was unavailable or disabled when Octave was built 

这是一个简单的例子,但你可以看到更好的例子和更多细节唯一一个工作的人,以及his presentation at OctConf 2012。更多细节(过时),Octave's JIT wiki page

请注意,Octave的JIT仅适用于非常简单的循环。如此简单的循环,没有人熟悉该语言会首先写出它们。这个特性是作为概念证明的,也是任何想要扩展它的人的起点(我个人更喜欢编写向量化代码,这就是语言的设计目的)。

Octave的JIT还有一个问题,那就是它使用LLVM。 Octave开发人员发现它对于这个目的来说太不可靠了,因为它不断向后兼容。 LLVM的每个次要版本都打破了Octave版本,所以Octave开发人员在LLVM 3.5发布时停止修复,并在默认情况下将其禁用。

+2

也许我们应该更新http://wiki.octave.org/FAQ#Just-In-Time_compiler和/或链接到这个答案 – Andy