查看单个帖子
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB Magical Mystery计时行为

我从编写的函数中遇到了一些非常奇怪的计时行为。如果我将函数包装在另一个空容器函数中,它将获得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



更多&回答...
poster 当前离线   回复时引用此帖