我已经在几个项目中使用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编译器?
发布于 2012-09-25 03:14:01
有四种方法可以提高Matlab代码的速度:
Matlab:运行时编译有助于循环,但似乎也会加快(或至少与)代码的其他部分交互,根据我在C/C++中的observations.
所有这些方法都需要开发人员致力于使代码更快。据我所知,Octave开发人员的主要关注点是确保( Matlab )功能的存在,而性能提高似乎是过去几年Matlab开发的重点。
发布于 2014-03-31 02:11:24
Matlab内部使用英特尔数学内核库(英特尔MKL)进行向量和矩阵运算。这给了Matlab比Octave更大的优势。
在Matlab中尝试命令“version”和“version”,以检查Matlab正在使用的-lapack的版本。
讨论MKL在Matlab中的使用的一个快速链接是http://stanford.edu/~echu508/matlab.html。
英特尔MKL是专有的。software.intel.com/en-us/intel-mkl。但是,对于非商业用途,Linux版本是免费的。如果Octave可以以某种方式使用安装在我们机器上的MKL,它应该会显着提高Octave的速度。
https://stackoverflow.com/questions/12569351
复制相似问题