我从编写的函数中遇到了一些非常奇怪的计时行为。如果我将函数包装在另一个空容器函数中,它将获得3倍的加速。
> >抽动; foo(args);托克
耗时:〜140秒
> >抽动; bar(args);托克
耗时:〜35秒
这是关键-bar()的定义:
定义条(参数)
foo(args)
结束
在
MATLAB中是否为嵌套函数调用触发了某种优化?我应该在编写的每个函数中添加一个虚拟函数吗?
回答:
据我所知,JIT加速器不对命令行表达式进行操作。因此,当您运行“ tic; foo(args); toc”时,foo的代码将完全在MATLAB解释器中运行。但是,当您运行“ tic; bar(args); toc”时,将在解释器中对bar进行评估,并且JIT加速器会尝试将对foo()的调用编译为本地代码。
我真的很想细节,但这就是要点。 MATLAB的JIT功能的细节很难得到。我发现的大部分内容都在The MathWorks的Loren博客上。我可以找到的有关仅命令行解释器的最接近的权威性声明是:
http :
//blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/#comment -207
更多&回答...