У меня есть программа, запускающая цикл. Я хочу иметь два счетчика времени, один для цикла, который скажет мне, как журнал сделал одну итерацию цикла, и одну для всей программы. Насколько мне известно, tic
и toc
будут работать только один раз.
Несколько счетчиков времени в MATLAB
Ответ 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);