Подтвердить что ты не робот

Несколько счетчиков времени в MATLAB

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

4b9b3361

Ответ 1

Вы знакомы только с этим синтаксисом tic toc:

tic; someCode; elapsed = toc;

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

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

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

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

for i = 1:M
   someCode;
end

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

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

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

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

Ответ 3

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

Прочитайте документацию Matlab, есть даже раздел о их вложенности. Вот пример:

tStartOverall = tic;

...

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

...

tEndOverall = toc(tStartOverall);