Несколько счетчиков времени в MATLAB - PullRequest
21 голосов
/ 02 февраля 2011

У меня есть программа, запускающая цикл. Я хочу иметь два счетчика времени, один для цикла, который расскажет мне, как журнал выполнил одну итерацию цикла и один для всей программы.Насколько мне известно, tic и toc будут работать только один раз.

Ответы [ 3 ]

32 голосов
/ 02 февраля 2011

Вы знакомы только с этим синтаксисом Tic Toc:

tic; someCode; elapsed = toc;

Но есть и другой синтаксис:

start = tic; someCode; elapsed = toc(start);

Второй синтаксис выполняет те же измерения времени, но позволяет вамвозможность одновременного запуска более одного таймера секундомера.Вы присваиваете вывод tic переменной tStart, а затем используете эту же переменную при вызове toc.MATLAB измеряет время, прошедшее между тиком и связанной с ним командой toc, и отображает время, прошедшее в секундах.Этот синтаксис позволяет синхронизировать несколько одновременных операций, включая время вложенных операций ( документация по Matlab для Tic Toc ).

Вот как это использовать в вашем случае.Допустим, это ваш код:

for i = 1:M
   someCode;
end

Вставьте тик и ток следующим образом:

startLoop = tic;
for i = 1:N
   startIteration = tic;
   someCode;
   endIteration = toc(startIteration);
end
endLoop = toc(startLoop);

Вы также можете использовать приведенный выше синтаксис для создания вектора, для которого i-й элементявляется измерением времени для i-й итерации.Как это:

startLoop = tic;
for i = 1:N
   startIteration(i) = tic;
   someCode;
   endIteration(i) = toc(startIteration(i));
end
endLoop = toc(startLoop);
2 голосов
/ 02 февраля 2011

Вы можете использовать tic и toc для временных вложенных операций, из справки Matlab для tic:

tStart=tic; any_statements; toc(tStart); выполняет одно и то же измерение времени, но позволяет вам одновременно запускать несколько таймеров секундомера.Вы присваиваете вывод tic переменной tStart, а затем используете эту же переменную при вызове toc.MATLAB измеряет время, прошедшее между тиком и связанной с ним командой toc, и отображает время, прошедшее в секундах.Этот синтаксис позволяет синхронизировать несколько одновременных операций, в том числе время вложенных операций

1 голос
/ 02 февраля 2011

Я не могу попробовать это прямо сейчас, но вы должны иметь возможность использовать несколько операторов tic и toc, если вы храните значения tic в переменных.

Чтение В документации Matlab по этому поводу есть даже раздел, посвященный их вложению.Вот грубый пример:

tStartOverall = tic;

...

tStartLoop = tic;
<your loop code here>
tEndLoop = toc(tStartLoop);

...

tEndOverall = toc(tStartOverall);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...