为什么Octave比MATLAB慢?

Sam*_*ahl 37 matlab octave

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

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

这一共识似乎也表明,大多数MATLAB的性能提升都归功于它的JIT编译器,它在运行时编译大型循环.这是有道理的,在这些情况下似乎会出现最大的性能差异(例如Mathworks Matlab与Gnu Octave)

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

Jon*_*nas 36

Matlab代码加速的方式有四种:

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

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

  • 多线程:有一系列具有多线程实现的函数,可以加速函数调用.

  • 通常更有效的实现.例如,在几个版本之前,中值滤波器为整数输入提供了大幅度的提升.

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


Soo*_*raj 17

Matlab内部使用英特尔数学核心库(英特尔MKL)进行矢量和矩阵运算.这为Matlab提供了超越Octave的显着优势.

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

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

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

  • 这真的很有趣.您能否提供链接或引文以及更多相关信息? (2认同)
  • @Sooraj你能提供一个链接,说明Matlab如何/在何处使用英特尔MKL?如果您想将英特尔MKL与Octave一起使用,很可能您必须自己编译Octave,请参阅:http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave (2认同)