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