如何提高用Matlab编写的代码速度

时间:2015-01-09 23:59:40

标签: performance matlab mex

Mathematica有一个名为Compile的功能,通过编译您在Mathematica languange中编写的代码,将其转换为c代码并在Mathematica中运行生成的代码,它不会给你c代码,但它会改变代码进入并使用它。与未编译版本相比,编译后的代码获得了很大的速度。

Matlab中是否有类似的功能,以便有人可以轻松地使用Matlab编写代码而无需额外的努力?

似乎Matlab编译器没有实现这个目标,因为它并不意味着用于此目的。 我不了解Matlab编码器。我刚读了一些关于MEX文件的内容,但对我而言,好像我必须用c编写代码然后将它带入Matlab以获得速度。

有人可以指导我并举一个简单的例子吗?

1 个答案:

答案 0 :(得分:3)

简短的回答:编译matlab代码不会让你加快速度,如果有的话。

答案越长: Matlab编译器更多的是让您部署matlab代码以便在没有matlab的机器上使用,而不是为了加快速度。事实上,从我用它部署的应用程序开始,它实际上用简化的Matlab运行时包装了脚本。因此,如果由于未打包和启动时间等因素而导致事情变慢,等等。

Matlab在其中有一些相当不错的及时优化的东西,它在加速编译方面处理了低成本。作为horchler&问题评论中提到的chappjc,你可以尝试 codegencoder ,但是你可能得不到更好的结果。

如果你想通过使用 mexFunction 来加快速度,那么你几乎不得不用c / c ++或fortran重新编写你的函数。根据问题的性质,您的C / C ++技能以及您必须花费的时间,这可能最终会提供更快的结果,因为它可以利用编译器的优化技巧和手动编码解决方案可能会删除matlab实现中发现的某些多余元素,这些元素是一般性的必要条件。然而,这样做会破坏“没有大量努力”的标准。

就低功耗方法而言,我建议您首先尝试使用配置文件来提高matlab代码的效率,以寻找瓶颈或不必要的重复,然后尝试向量化尽可能计算,因此matlab可以自动并行化它们。

如果您仍然需要提升性能并且正在使用certain matrix functions,那么您可以查看 Matlab的GPU和CUDA 支持。我自己还没有做太多的事情,但是你可能需要将一些数据类型更改为gpuArray以获得它在你的显卡上运行的好处(这是并行计算的一个推动)。