TicToc

Average rating
(4 votes)

Timing sections of code is relatively simple in IGOR, using startMStimer and stopMStimer, but the two following functions make it even more simple, much like it is in MATLAB.

function tic()
	variable/G tictoc = startMSTimer
end
 
function toc()
	NVAR/Z tictoc
	variable ttTime = stopMSTimer(tictoc)
	printf "%g seconds\r", (ttTime/1e6)
	killvariables/Z tictoc
end

Here is an example of the use of tic() and toc() functions to time some FFTs.

Function testTicToc()
 
	tic()
	variable i
	For(i=0;i<10000;i+=1)
		make/O/N=512 temp = gnoise(2)
		FFT temp
	Endfor
	killwaves/z temp
	toc()
End

Output to history is:

•testTicToc()
1.3182 seconds

P.S. I vastly prefer IGOR to MATLAB, I just wanted to make inserting a timer into code a bit easier.

This is a handy set of

This is a handy set of routines. I've run into a "bug", however, that is more of a WM "feature"....

In using the routines, I sometimes wanted to time my program, and sometimes I didn't. So, being lazy, I just commented out the toc() call at the end of my code. After a while, tic / toc no longer worked :( giving a NaN for the time value. After some head scratching, what is going on is that every time I ran the program with tic() active, a new MSTimer was started. After 10 were active, the timers were "full" and a further tic() call just returns -1. To add insult to injury, to "fix" the problem, I had to manually excute print stopMSTimer(0), print stopMSTimer(1), .... print stopMSTimer(9). Yuck!

Seems to me that a reasonable fix for this would be to allow one to call

StartMSTimer(n)

with n={0,1, ..., 9}

Doing that would automatically reset and restart timer n (even if previously running). Calling StartMSTimer without an argument could give the old behavior. And while we're at it, maybe

StopMSTimer(-3) 

could clear all timers? (-1 and -2 seem to be taken)

John Bechhoefer
Department of Physics
Simon Fraser University
Burnaby, BC, Canada

Back to top