Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 加速Matlab到C ++的转换

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

谢谢

曾娜


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

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

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

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



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:43


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.