Performance 为什么Matlab Profiler说';结束';a';对于';环
因此,我最近开始定期使用Matlab的内置分析器,我注意到,虽然它通常能很好地显示哪些行占用了最多的时间,但有时它会告诉我,在Performance 为什么Matlab Profiler说';结束';a';对于';环,performance,matlab,for-loop,profiling,profiler,Performance,Matlab,For Loop,Profiling,Profiler,因此,我最近开始定期使用Matlab的内置分析器,我注意到,虽然它通常能很好地显示哪些行占用了最多的时间,但有时它会告诉我,在for循环的end语句中使用了大量的时间 现在,看到这样一条线只是用来表示循环的结束,我无法想象它除了少量的处理之外还能使用什么 我已经看到了这个问题的具体版本,但似乎没有达成共识 编辑:下面是这个问题的一个最小示例: for i =1:1000 x = 1; x = [x 1]; % clear x; end 即使取消注释clear,end行仍
for
循环的end
语句中使用了大量的时间
现在,看到这样一条线只是用来表示循环的结束,我无法想象它除了少量的处理之外还能使用什么
我已经看到了这个问题的具体版本,但似乎没有达成共识
编辑:下面是这个问题的一个最小示例:
for i =1:1000
x = 1;
x = [x 1];
% clear x;
end
即使取消注释
clear
,end
行仍然会占用大量的计算量(大约20%),而clear
实际上增加了由结束行执行的绝对计算量。当我在代码中看到这一点时,它是循环中创建的大型临时对象的释放。循环中创建的每个新变量都会在末尾释放“这可能是一个预分配问题。虽然您没有发布代码,所以我们很难对其进行分析。”我没有发布代码,因为我想知道一般情况,但我可以发布一个案例,或者具体情况是否有帮助。而且,如果这始终是一个预分配问题,那么为什么探查器不指向进行分配的行而不是“结束”行呢?@zergylord:请给出一个再现该问题的最小示例。你不必在这里发布你的全部代码。否则,我们很难尝试它,我们当然没有时间去摆弄和想出一个例子来重现这个问题。如果你的Matlab循环是在数组上运行的,endfor可能会释放循环体使用的空间,但下一次循环迭代不需要。只是一个想法。我以前就注意到了这一点,并且感觉到他们将无法分配给特定代码行的全部时间集中在末尾。不过,解除分配是有道理的。考虑到我使用Matlab的经验,这似乎是有可能的。因此,您能否通过使用clear var1
显式解除分配变量来缓解这种情况?@Marcin感谢您的想法,但我只是尝试了一下,但没有任何效果:(@Marcin原来最后一行是释放内存,然后重新冷却它。显然,有一个未记录的命令“profile-memory-on”允许你在你的个人资料中看到这种情况results@zergylord谢谢,找到一篇关于它的文章: