Using Timing Routines

Built-in timing routines routines can measure wall-clock time, CPU time and system time. Subroutines exist so that C or Fortran routines can access wall-clock and CPU timing information. Both are discussed in this document.

Routines for getting the wall-clock, CPU time and system time exist both in the AIX operating system and the "csh" program. For instance, here is an example of the usage of the Unix timing command:

time a.out
Real 1.0
User 0.7
System 0.0

More information on this command is available with the command "man time".

The timing command in the csh outputs the following:

time a.out
0.7u 0.0s 1:00 70% 150+58k 0+0io 0pf+0w

More information on the csh timing routine is available using "man csh".

Timing routines can also be called from inside Fortran of C programs. Here are several timing routines you might consider adding to your files:

A C program to get the real time:

#include <sys/time.h>

int elapsed(double *sec)
{
extern int gettimeofday();
struct timeval t;
struct timezone tz;
int stat;
stat = gettimeofday(&t, &tz);
*sec = (double)(t.tv_sec + t.tv_usec/1000000.0);
return(stat);
}


A Fortran program that calls elapsed to get the CPU time:

program main
integer i, info
double precision dummy, begin, finish
integer elapsed
external elapsed

info = elapsed( begin )
do i = 1, 1000000
dummy = dummy * 1000 + 2
enddo
info = elapsed( finish )
print *, finish - begin
end


A Fortran program to get CPU time in seconds:

double precision function dsecnd( )
integer t
integer mclock
external mclock
t = mclock( )
dsecnd = dble( t ) * 0.01D0
return
end


Fortran and C timing routines can be easily interchanged using interlanguage calls.