我一直在使用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的速度.