首页 文章

为什么Octave比MATLAB慢?

提问于
浏览
35

我一直在使用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编译器不需要/未使用?

2 回答

  • 13

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

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

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

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

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

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

  • 33

    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的速度 .

相关问题