首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用MATLAB编译器时,我看不到显著的加速?

为什么在使用MATLAB编译器时,我看不到显著的加速?
EN

Stack Overflow用户
提问于 2008-09-26 00:02:40
回答 11查看 9.6K关注 0票数 9

我有很多很好的MATLAB代码,运行速度太慢,用C编写会很痛苦。MATLAB编译器对C的帮助似乎不大,如果有帮助的话。它应该更快地执行吗?我完蛋了吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-26 04:16:49

我将附和dwj所说的话:如果你的MATLAB代码很慢,这可能是因为它没有足够的矢量化。如果你在可以对整个数组进行操作的时候进行显式循环,那就是罪魁祸首。

这同样适用于所有面向数组的动态语言: Perl Data Language、Numeric、MATLAB/Octave等。在编译的C和FORTRAN编译代码中甚至在某种程度上也是如此:特殊设计的矢量化库通常使用精心编写的内部循环和单指令多数据指令集(如MMX、SSE、AltiVec)。

票数 14
EN

Stack Overflow用户

发布于 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

票数 22
EN

Stack Overflow用户

发布于 2008-09-26 00:15:04

在我的经验中,缓慢的MATLAB代码通常来自于没有向量化你的代码(例如,编写for循环而不只是乘法数组(简单的例子))。

如果您正在进行文件I/O,请注意一次读取一个块中的数据。在帮助文件中查找fscanf的矢量化版本。

不要忘记,MATLAB还包含一个分析器!

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/137011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档