Toc returns loop time instead of total script time

23 次查看(过去 30 天)
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.

请先登录,再进行评论。

回答(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
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 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by