我听到有关 Octave 实验性 JIT 编译器功能的非常矛盾的信息,从“这是一个玩具项目,但它基本上不起作用”到“我使用了它,并且我获得了显着的加速”。
我知道为了成功使用它,需要
- 编译八度与
--enable-jit
在配置时
- 启动八度音程
--jit-compiler
option
- 使用以下命令在运行时指定 jit 编译首选项
jit_enable
and jit_startcnt
命令
但我一直无法令人信服地重现其效果;不确定这是否是因为我错过了我不知道的任何其他步骤,或者它根本对我的机器没有太大影响。
问:成功使用该功能的人能否提供一个最小的工作示例来演示其正确使用及其对计算机的影响(如果有)?
简而言之:
- 你不需要做任何事情来使用 JIT,它应该可以工作并加速你的代码(如果可以的话);
- 它几乎没有用,因为它只适用于简单的循环;
- 它只不过是一个概念的证明;
- there is no one currently working on improving it because:
- 这是一个复杂的问题;
- 它主要是对草率的 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唯一参与此工作的人,以及他在 2012 年 OctConf 上的演讲。有关(已过时)的更多详细信息,Octave 的 JIT wiki 页面
请注意,Octave 的 JIT 仅适用于非常简单的循环。如此简单的循环以至于熟悉该语言的人一开始就不会编写它们。该功能是作为概念证明,也是任何想要扩展它的人的起点(我个人更喜欢编写矢量化代码,这就是该语言的设计目的)。
Octave 的 JIT 还有一个问题,那就是它使用 LLVM。 Octave 开发人员发现它对于此目的太不可靠,因为它不断破坏向后兼容性。 LLVM 的每个小版本都会破坏 Octave 构建,因此当 LLVM 3.5 发布并默认禁用它时,Octave 开发人员停止修复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)