PDA

查看完整版本 : MATLAB Magical Mystery计时行为


poster
2019-12-10, 16:49
我从编写的函数中遇到了一些非常奇怪的计时行为。如果我将函数包装在另一个空容器函数中,它将获得3倍的加速。

> >抽动; foo(args);托克

耗时:〜140秒

> >抽动; bar(args);托克

耗时:〜35秒

这是关键-bar()的定义:

定义条(参数)

foo(args)

结束

在MATLAB中 (http://en.wikipedia.org/wiki/MATLAB)是否为嵌套函数调用触发了某种优化?我应该在编写的每个函数中添加一个虚拟函数吗?


回答:
据我所知,JIT加速器不对命令行表达式进行操作。因此,当您运行“ tic; foo(args); toc”时,foo的代码将完全在MATLAB解释器中运行。但是,当您运行“ tic; bar(args); toc”时,将在解释器中对bar进行评估,并且JIT加速器会尝试将对foo()的调用编译为本地代码。

我真的很想细节,但这就是要点。 MATLAB的JIT功能的细节很难得到。我发现的大部分内容都在The MathWorks的Loren博客上。我可以找到的有关仅命令行解释器的最接近的权威性声明是: http (http://blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/#comment-207) : //blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/#comment -207 (http://blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/#comment-207)



更多&回答... (https://stackoverflow.com/questions/1313438)