我有一些需要加速的Matlab代码.通过分析,我已经确定了一个特定的函数作为减慢执行速度的罪魁祸首.这个函数在循环中被调用了数十万次.
我的第一个想法是将函数转换为mex(使用Matlab Coder)来加速它.然而,常见的编程意义告诉我Matlab和mex代码之间的接口会导致一些开销,这意味着调用这个mex函数数千次可能不是一个好主意.它是否正确?或者Matlab在重复调用相同的mex以消除开销时会做些什么?
如果是显著的开销,我想重新编写代码,以增加循环函数本身和再创造的一个MEX.在此之前,我想验证我的假设,以证明花在此上的时间.
更新:
我尝试了@ angainor的建议,并使用以下代码创建了donothing.m:
function nothing = donothing(dummy) %#codegen
nothing = dummy;
end
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个mex函数作为donothing_mex,并尝试了以下代码:
tic;
for i=1:1000000
donothing_mex(5);
end
toc;
Run Code Online (Sandbox Code Playgroud)
结果是,对该功能的一百万次调用大约需要9秒.这对我们来说并不是一个重要的开销,所以现在我想我会将被调用的函数单独转换为mex.但是,从一个执行大约一百万次的循环调用一个函数回想起来似乎是一个非常愚蠢的想法,考虑到这是性能关键代码,所以将循环移动到mex函数仍然在书中,但优先级要低得多.