【发布时间】:2012-09-16 04:01:38
【问题描述】:
我在几个项目中一直使用 Octave 和 MATLAB,并且遇到了一些问题。这个问题Why/when should I prefer MATLAB over Octave?) 回答了好几个,但还有一个挥之不去……
我已经阅读了一些比较 Octave 和 MATLAB 性能的帖子/其他来源,并且我已经在标准脚本上运行了一些我自己的测试,这些测试证实了人们普遍认为 Octave 在标准操作方面通常比 MATLAB 慢得多(当然是迭代的,这样比较才有意义)。
共识似乎还表明,MATLAB 的大部分性能提升归功于其 JIT 编译器,该编译器在运行时编译大型循环。这是有道理的,最大的性能差异似乎出现在这些情况下(例如Mathworks Matlab vs Gnu Octave)
我的问题如下:为什么向量化代码在 Octave 中也运行得更慢?在这种情况下,似乎应该在循环之前留出内存,并且一些本机 C/C++ 循环应该执行该操作,这将等同于 Octave 和 MATLAB 对于矢量化代码的性能。此外,这是否具有更广泛的含义,即 Octave 对于复杂操作的性能可能会更差,即使编写代码时不需要/未使用 JIT 编译器?
【问题讨论】:
-
关于 Matlab 的 JIT 提高性能的文章很多,Matlab 的 JIT 无法内联函数调用,鉴于 FOR 循环之间存在奇怪的性能差异,我不确定它可以如何优化 FOR 循环在 Matlab 和 JAVA 中(有一个有效的 JIT)。解释语言的所有实现都有 JIT,但 Matlab 的实现相当薄弱。
-
“所有解释语言的实现都有一个 JIT”是不正确的。