Performance Matlab:局部函数(子函数)是与主函数一起编译还是单独编译?
我听说MATLAB有一个自动的函数编译功能,如果您多次调用函数,如以下代码所示,可能会产生大量函数调用开销:Performance Matlab:局部函数(子函数)是与主函数一起编译还是单独编译?,performance,matlab,optimization,compiler-optimization,Performance,Matlab,Optimization,Compiler Optimization,我听说MATLAB有一个自动的函数编译功能,如果您多次调用函数,如以下代码所示,可能会产生大量函数调用开销: function output = BigFunction( args ) for i = 1:10000000 SmallFunction( args ); end end 如果将函数SmallFunction()作为本地函数放在与BigFunction()相同的文件中,调用该函数会更快吗?或者除了将SmallFunction()中的代码粘贴到BigF
function output = BigFunction( args )
for i = 1:10000000
SmallFunction( args );
end
end
如果将函数SmallFunction()
作为本地函数放在与BigFunction()
相同的文件中,调用该函数会更快吗?或者除了将SmallFunction()
中的代码粘贴到BigFunction()
中以优化性能之外,还有什么好的解决方案吗
Edit:假设函数调用开销是由于需要编译造成的,这可能是错误的。问题是如何在不让代码看起来糟糕的情况下减少开销。Matlab将读取的函数散列到内存中。如果函数作为独立函数存在于自己的文件中,则只编译一次。如果将
BigFunction
放在BigFunction.m
中,并将SmallFunction
放在SmallFunction.m
中,那么您应该会获得一次编译m脚本的优化好处。我的第一个问题的答案是,本地函数与另一个文件中的函数执行相同的操作
第二个问题的一个想法是,如果可能的话,将SmallFunction()
作为一个内联函数,这样可以减少函数调用开销。我在中找到了有关函数调用性能的更多信息,并将问题和答案粘贴到下面:
问题:
我有7种不同类型的函数调用:
尽管知道两者之间存在差异很有趣,但我高度怀疑您是否能从中获得显著的加速。您所说的“内联函数”是什么意思?匿名函数?根据我的经验,这些函数的性能通常比同等的子函数或M文件函数稍差。或者你的意思是自己做内联,也就是说,实际上不是一个函数!?是的,关于“内联函数”中的模糊性,您是对的。我的意思是用语法定义的匿名函数:
sqr=@(x)x.^2代码>。不过我不同意你的表现。我做了一个快速的性能测试,比较了将square函数作为一个匿名函数(如上所述)或将其放在一个单独的文件中并执行大量操作的性能。匿名函数的性能明显更好,但粘贴代码的性能更好。