我听到有关Octave的实验性JIT编译器功能的非常矛盾的信息,从“它是一个玩具项目但它基本上不起作用”到“我已经使用它并且我获得了显着的加速”。
我知道为了成功使用它,需要
--enable-jit
编译八度音程--jit-compiler
选项jit_enable
和jit_startcnt
命令但我无法令人信服地重现这些效果;不确定这是因为我错过了我不知道的任何其他步骤,或者它对我的机器没有太大影响。
问:使用该功能的人是否可以成功提供一个最小的工作示例,以证明其正确使用及其在机器上的效果(如果有)?
答案 0 :(得分:7)
简而言之:
问:可以成功使用该功能的人提供一个最小的工作示例,证明其正确使用及其在机器上的效果(如果有的话)吗?
没有任何表现。如果你使用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发布时停止修复并默认禁用它。