Почему Matlab Profiler говорит, что в операторе 'end' цикла 'for' есть узкое место? - PullRequest
11 голосов
/ 02 августа 2011

Итак, я недавно начал использовать встроенный в Matlab профилировщик на регулярной основе, и я заметил, что, хотя он обычно отлично показывает, какие строки занимают больше всего времени, иногда он говорит мне большоекусок времени используется в операторе end цикла for.

Теперь, видя, что такая строка используется только для обозначения конца цикла, я не могу представить, как этоможет использовать что угодно, кроме обычного объема обработки.

Я видел конкретную версию этого вопроса, задаваемую на matlab central , но консенсус, похоже, не был достигнут.

РЕДАКТИРОВАТЬ: Вот минимальный пример этой проблемы:

for i =1:1000
    x = 1;
    x = [x 1];
    % clear x;
end

Даже если вы раскомментируете clear, строка end по-прежнему занимает много вычислений (около 20%)и clear фактически увеличивает абсолютный объем вычислений, выполняемых конечной строкой.

1 Ответ

8 голосов
/ 02 августа 2011

Когда я увидел это в своем коде, это было освобождение больших временных созданных в цикле.Каждая новая переменная, созданная в цикле, освобождается в end.

...