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

时间:2016-08-02 13:25:21

标签: octave jit

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

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

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

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

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

1 个答案:

答案 0 :(得分: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

这是一个简单的示例,但您可以看到更好的示例以及有关此问题的唯一人blog的更多详细信息,以及his presentation at OctConf 2012。关于(过时的)Octave's JIT wiki page

的更多细节

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

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