Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 为什么Matlab Profiler说';结束';a';对于';环_Performance_Matlab_For Loop_Profiling_Profiler - Fatal编程技术网

Performance 为什么Matlab Profiler说';结束';a';对于';环

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行仍

因此,我最近开始定期使用Matlab的内置分析器,我注意到,虽然它通常能很好地显示哪些行占用了最多的时间,但有时它会告诉我,在
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谢谢,找到一篇关于它的文章: