加速Matlab到C++的转换

zen*_*nna 8 c++ performance matlab image-processing

我有一些Matlab图像处理代码运行得非常慢,我准备将其转换为C/C++.我真的不太了解matlab如何工作以及如何执行代码,但我只是想知道我可能期望的加速速度.很明显,有许多变量会影响到这一点,但我只是想从你自己的经历中寻找指南.

谢谢

泽纳

Jas*_*n B 8

它主要取决于Matlab中循环的紧密程度.如果你只是调用一系列内置的Matlab图像处理函数,你很可能无法提高性能(很可能你会伤害它).如果您循环图像像素或进行某种块处理,您可能会看到很大的改进.如果您正在进行一些循环,但每次迭代中的处理量很大,您可能只看到很少或没有改进.

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

我发现最好的方法是使用C和Matlab的组合.当操作可以很容易地进行矢量化时(使用矢量/矩阵操作),我使用Matlab.这可能意味着从一个看起来最直接的角度来解决问题.此外,很难击败Matlab的绘图和可视化,所以我绝对不会转向所有的C/C++解决方案,除非你有一个如何使用C/C++进行展示的计划(如果这是你项目的一部分).

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

  • 随着JIT加速器的引入,"for循环惩罚"并不像过去那样受到关注.使用分析器找到真正的瓶颈. (2认同)