Octave JIT编译器.当前状态,以及演示效果的最小示例

Tas*_*nou 3 jit octave

我听到有关Octave的实验性JIT编译器功能的非常矛盾的信息,从"它是一个玩具项目,但它基本上不起作用"到"我已经使用它并且我获得了显着的加速".

我知道为了成功使用它需要

  • 使用--enable-jitat configure时编译八度音程
  • 使用该--jit-compiler选项启动八度音程
  • 使用jit_enablejit_startcnt命令在运行时指定jit编译首选项

但我无法令人信服地再现这些效果; 不确定这是因为我错过了我不知道的任何其他步骤,或者它对我的机器没有太大影响.

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

car*_*aug 7

简而言之:

  • 你不需要做任何事情来使用JIT,它应该只是工作并加速你的代码,如果可以的话;
  • 它几乎没用,因为它只适用于简单的循环;
  • 它只不过是一个概念的证明;
  • 目前没有人正在努力改进它,因为:
    • 这是一个复杂的问题;
    • 它主要是修复松散的Octave代码;
    • 使用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
Run Code Online (Sandbox Code Playgroud)

这是一个简单的示例,但您可以在博客中查看更好的示例和更多详细信息,以及他在OctConf 2012上的演示.关于(过时的)Octave的JIT维基页面的更多细节

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

Octave的JIT还有一个问题就是它使用LLVM.Octave开发人员发现它太不可靠了,因为它不断破坏向后兼容性.LLVM的每个次要版本都破坏了Octave版本,因此Octave开发人员在LLVM 3.5发布时停止修复并默认禁用它.

  • 也许我们应该更新http://wiki.octave.org/FAQ#Just-In-Time_compiler和/或链接到这个答案 (2认同)