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

How to increase the speed of code written in Matlab

Mathematica 有一个叫做 Compile 的功能,通过编译你用 Mathematica languange 编写的代码,你把它变成 c 代码和 运行 Mathematica 中的结果代码,它不会给你 c 代码但是它将代码转换成它并使用它。与未编译版本相比,编译代码获得了很多速度。

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

似乎 Matlab 编译器没有实现这个目标,因为它确实不适合用于此目的。 我不知道 Matlab 编码器。我刚刚阅读了一些有关 MEX 文件的内容,但对我来说,似乎我必须用 c 编写代码,然后将其导入 Matlab 以提高速度。

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

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

较长的答案: Matlab Compiler 更多是为了让您部署 matlab 代码以在没有 matlab 的机器上使用,而不是为了提高速度。事实上,从深入研究我用它部署的应用程序来看,它实际上用缩短的 Matlab 运行 时间来包装脚本。因此,如果有的话,这会由于解包和启动时间等原因而减慢速度。

无论如何,Matlab 有一些相当不错的即时优化 东西,它在编译加速方面处理了容易实现的成果。正如问题评论中提到的 horchler & chappjc,您可以尝试 codegencoder,但是您可能不会得到更好的结果。

如果您想尝试使用 mexFunction 来提高速度,那么您几乎必须在 c/c++ 或语言。根据问题的性质、您使用 C/C++ 的技能以及您必须花费的时间,这可能最终会提供明显更快的结果,因为它可以利用您的编译器的优化技巧,并且手工编码的解决方案可能会删除在 matlab 实现中发现的某些多余元素,这些元素对于一般性来说是必需的。但是,这样做会破坏 "without significant effort" 标准。

就省力方法而言,我建议您先尝试使用 profile 来寻找瓶颈或不必要的重复,然后再尝试提高 matlab 代码的效率尽可能矢量化 计算,以便 matlab 可以自动并行化它们。

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