Toc returns loop time instead of total script time

조회 수: 3 (최근 30일)
Nicolas Schnedler-Meyer
Nicolas Schnedler-Meyer 2015년 4월 27일
편집: Philip Borghesani 2015년 4월 29일
Hi
I have a script with a large loop nested inside another loop, and i would like to time the progress of the loop, using the tic/toc commands.
The code is like this:
tic
--some code and small loops--
for i=1:lengthi
for j=1:lengthj
clc
disp(['Iteration: ' num2str((i-1)*lengthj+j) ' of ' num2str(lengthi*lengthj)]);
toc
--some code--
end
end
toc
however, when I run the code, toc seems to display the time since last toc, instead of the time since tic. The problem is not exclusive to this piece of code, I have noticed it before with other scripts.
Any thoughts or experience with this?
-Nicolas
  댓글 수: 3
Greig
Greig 2015년 4월 28일
What version are you using?
I encounter something similar in 2014a with a particular piece of code, but I could never replicate in another code. I spent ages looking for other tics or clears, but was pretty sure there were none.
Nicolas Schnedler-Meyer
Nicolas Schnedler-Meyer 2015년 4월 29일
It happens both in version 2014b and 2015a.

댓글을 달려면 로그인하십시오.

답변 (4개)

pfb
pfb 2015년 4월 27일
편집: pfb 2015년 4월 27일
Hi,
I've tried this
tic;
for k=1:10
pause(2);
toc;
end
pause(2);
toc;
on both R2012b and R2014b and the output is what I expect: after each toc 2 seconds are passed
Elapsed time is 2.000970 seconds.
Elapsed time is 4.002267 seconds.
[...]
Elapsed time is 22.011765 seconds.
  댓글 수: 4
Nicolas Schnedler-Meyer
Nicolas Schnedler-Meyer 2015년 4월 28일
there's no tic in "-- some code --", no.
Haven't tried other measures, I'm just mystified by toc not working properly..
pfb
pfb 2015년 4월 28일
I can understand that... It's puzzling.
I'd just try and look whether etime and clock are similarly affected by this thing, or else if this is a problem with tic and toc alone...

댓글을 달려면 로그인하십시오.


Ilham Hardy
Ilham Hardy 2015년 4월 28일
Apart from tic and toc, there is also profile command to check the bottleneck of the script/function.

Jan
Jan 2015년 4월 28일
Do you have a 'clear all' anywhere in your code?

Philip Borghesani
Philip Borghesani 2015년 4월 29일
편집: Philip Borghesani 2015년 4월 29일
Clear all and clc will not clear tic time.
There must be another call to tic. For this reason I recommend always using the t0=tic; t=toc(t0) form of these functions.
To find other calls to tic try dbstop in tic or write your own version of tic that checks for other uses.
A foolproof way to find the call to tic with no output is to fix your outer loop to call t0=tic and place this tic.m in your current directory:
function t0=tic
if nargout==0
dbstack
keyboard
end
t0=builtin('tic');
end

카테고리

Help CenterFile Exchange에서 Performance and Memory에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by