我有很多很好的MATLAB代码,运行速度太慢,用C编写会很痛苦。MATLAB编译器对C的帮助似乎不大,如果有帮助的话。它应该更快地执行吗?我完蛋了吗?
发布于 2008-09-26 04:16:49
我将附和dwj所说的话:如果你的MATLAB代码很慢,这可能是因为它没有足够的矢量化。如果你在可以对整个数组进行操作的时候进行显式循环,那就是罪魁祸首。
这同样适用于所有面向数组的动态语言: Perl Data Language、Numeric、MATLAB/Octave等。在编译的C和FORTRAN编译代码中甚至在某种程度上也是如此:特殊设计的矢量化库通常使用精心编写的内部循环和单指令多数据指令集(如MMX、SSE、AltiVec)。
发布于 2008-09-26 09:56:33
如果您使用的是MATLAB complier (在MATLAB的最新版本上),那么您几乎肯定不会看到任何加速。这是因为编译器实际上所做的就是为您提供了一种打包代码的方法,以便将其分发给没有MATLAB的人。它不会把它转换成任何更快的东西(比如机器码或C语言)--它只是用C语言包装它,这样你就可以调用它了。
它通过让你的代码在MATLAB编译器运行时(MCR)上运行来做到这一点,MCR本质上就是MATLAB的计算内核--你的代码仍然在被解释。由于必须调用MCR而带来的损失,您可能会发现编译后的代码运行起来比在MATLAB上运行要慢得多。
换一种方式--你可能会说编译器实际上并没有编译--至少在传统意义上是这样。
旧版本的编译器工作方式不同,在某些情况下可能会出现加速。有关Mathwork对此的看法,请访问
http://www.mathworks.com/support/solutions/data/1-1ARNS.html
发布于 2008-09-26 00:15:04
在我的经验中,缓慢的MATLAB代码通常来自于没有向量化你的代码(例如,编写for循环而不只是乘法数组(简单的例子))。
如果您正在进行文件I/O,请注意一次读取一个块中的数据。在帮助文件中查找fscanf的矢量化版本。
不要忘记,MATLAB还包含一个分析器!
https://stackoverflow.com/questions/137011
复制相似问题