c++ - 加速 Matlab 到 C++ 的转换

标签 c++ performance matlab image-processing

我有一些运行速度很慢的 Matlab 图像处理代码,我准备将其转换为 C/C++。我不太了解 matlab 的工作原理以及代码的执行方式,但我只是想听听我期望得到什么样的加速。显然,有许多变量会对此产生影响,但我只是想从您自己的经验中寻找指导。

谢谢

珍娜

最佳答案

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

我看待 Matlab 的方式是,每条执行的行都有一定的开销。如果您可以将您的解决方案转化为矩阵乘法或其他一些 vector/矩阵运算的形式,那么您只会承受一次这种开销并且可以忽略不计。但是,对于循环,每次循环迭代时您都会承受这种开销。此外,大多数 Matlab 的图像处理函数只是调用优化库,所以不要尝试重新创建它们,除非您确定它们可以改进的地方。

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

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

关于c++ - 加速 Matlab 到 C++ 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230065/

相关文章:

c++ - DLL 项目中的静态链接函数

c++ - io_service 在线程内运行

c++ - 查找最大值和最小值

performance - 代码生成时间

c++ - 如果存在内存分配错误,请从 mex 文件中正常退出

c++ - 如何确定 Qt 驱动器上有多少可用空间?

c++ - 原子递减比递增更昂贵吗?

java - 测试对象是否为空的有效方法

matlab - Matlab : numerical arguments or counterexample? 中线性不等式/等式系统隐含的不等式

matlab - 玫瑰方程式(极地)3d