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