42

我一直在使用 Octave 和 MATLAB 进行一些项目,并且遇到了一些问题。这个问题为什么/什么时候我应该更喜欢 MATLAB 而不是 Octave?) 回答了好几个,但还有一个挥之不去……

我已经阅读了许多比较 Octave 和 MATLAB 性能的帖子/其他来源,并且我已经在标准脚本上运行了一些我自己的测试,这些测试证实了普遍的共识,即 Octave 通常比 MATLAB 的标准操作慢得多(迭代,当然,这样比较才有意义)。

共识似乎还表明,MATLAB 的大部分性能提升归功于其 JIT 编译器,该编译器在运行时编译大型循环。这是有道理的,最大的性能差异似乎出现在这些情况下(例如Mathworks Matlab 与 Gnu Octave

我的问题如下:为什么向量化代码在 Octave 中也运行得更慢?在这种情况下,似乎应该在循环之前留出内存,并且一些本机 C/C++ 循环应该执行该操作,这将等同于 Octave 和 MATLAB 对于矢量化代码的性能。此外,这是否具有更广泛的含义,即 Octave 对复杂操作的性能可能会更差,即使编写代码时不需要/未使用 JIT 编译器?

4

2 回答 2

41

Matlab 代码有四种加速方式:

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

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

  • 多线程:有一个具有多线程实现的函数列表,这将加速函数调用。

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

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

于 2012-09-24T19:14:01.137 回答
19

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。

于 2014-03-30T18:11:24.357 回答