登录论坛

查看完整版本 : 加速Matlab到C ++的转换


poster
2019-12-10, 16:49
我有一些Matlab图像处理代码,其运行速度非常慢,我准备将其转换为C / C ++。我对matlab的工作原理以及代码的执行方式并不太了解,但我只是想听听我可能期望的那种加速。显然,有很多变量会影响这一点,但是我只是在寻找可能是根据您自己的经验提供的指南。

谢谢

曾娜


回答:
这主要取决于Matlab中循环的紧密程度。如果仅调用一系列内置的Matlab图像处理功能,则很可能无法提高性能(很可能会损害性能)。如果要遍历图像像素或进行某种块处理,则可能会看到很大的改进。如果您正在执行一些循环,但是每次迭代中的处理量都很大,则可能只会看到很少的改善或根本没有改善。

我看Matlab的方式是,每个执行的行都有一定的开销。如果您可以将解决方案采用矩阵乘法或其他向量/矩阵运算的形式,那么您只需承受一次开销,并且可以忽略不计。但是,使用循环时,每次循环迭代时都会遭受开销。而且,大多数Matlab的图像处理功能都只是调用优化的库,因此,除非您确定要改进的地方,否则不要尝试重新创建它们。

我发现最好的方法是结合使用C和Matlab。当可以轻松地对操作进行矢量化时(使用矢量/矩阵运算),我使用Matlab。这可能意味着从不同于最直接的角度来解决问题。此外,很难击败Matlab的绘图和可视化,因此,除非您有一个计划如何使用C / C ++进行显示(如果这是项目的一部分),否则我绝对不会转向所有C / C ++解决方案。

如果我无法提出一种相对简单的矢量化方法,则只需在可以从Matlab调用的C mex函数中实现需要紧密循环的部分处理即可。在这种情况下,我倾向于使用C而不是C ++,因为该过程应该相对较小并且不需要很多复杂的数据抽象,但是C ++也可以正常工作。确保以列优先顺序访问图像数据,以最大程度地提高缓存命中率,因为这是Matlab组织矩阵的方式。



更多&回答... (https://stackoverflow.com/questions/1230065)