【问题标题】:Why is Octave slower than MATLAB?为什么 Octave 比 MATLAB 慢?
【发布时间】: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”是不正确的。

标签: matlab octave


【解决方案1】:

Matlab 代码有四种加速方式:

  • JIT:根据我的轶事观察,在运行时编译有助于循环,但似乎也可以加速(或至少与代码的其他部分交互)。

  • 在 C/C++ 中实现函数:有一堆在 Matlab/Octave 中实现的 Matlab/Octave 函数。在每个版本中,都会有更多的它们被制作成内置插件。

  • 多线程:a list of functions 具有多线程实现,这将加快函数调用。

  • 通常更有效的实现。例如,在几个版本之前,中值滤波器在整数输入上获得了巨大的速度提升。

所有这些方法都需要致力于让代码更快的开发人员。据我所知,Octave 开发人员的主要关注点是确保(Matlab)功能完全存在,而性能提升似乎是过去几年 Matlab 开发的重点。

【讨论】:

  • 如果您比较非向量化循环与等效向量化操作的性能,很明显,对于像内积 Octave 这样的简单操作,可能会花费 75% 以上的时间来解释循环体,而不是做数学。我怀疑 MATLAB JIT'ter 也更有能力消除公共子表达式 - 编译器通常更清楚这一点。
【解决方案2】:

Matlab 在内部使用英特尔数学核心函数库 (英特尔 MKL) 进行向量和矩阵运算。这使 Matlab 比 Octave 具有显着优势。

在您的 Matlab 中尝试命令 'version -lapack' 和 'version -blas' 来检查您的 Matlab 使用的 MKL 版本。

Matlab 讨论 MKL 用法的快速链接是http://stanford.edu/~echu508/matlab.html

英特尔 MKL 是专有的。软件.intel.com/en-us/intel-mkl。但是,对于非商业用途,Linux 版本是免费的。如果 Octave 能够以某种方式使用我们机器上安装的 MKL,它应该会显着加快 Octave。

【讨论】:

  • 这真的很有趣。您能否提供链接或引文以提供有关此内容的更多信息?
  • 这很有趣。它是专有的还是什么?否则为什么 Octave 不使用它呢?
  • @Sooraj 您能否提供一个链接,说明 Matlab 如何/在何处使用英特尔 MKL?如果您想将 Intel MKL 与 Octave 一起使用,很可能您必须自己编译 Octave,请参阅:software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2013-08-08
相关资源
最近更新 更多