Statistics
| Branch: | Revision:

root / synthbench / euroben-ports / base / C / mod2am / cclock.c @ 0:839f52ef7657

History | View | Annotate | Download (1.1 kB)

1 0:839f52ef7657 louridas
#include <stdlib.h>
2 0:839f52ef7657 louridas
#include <sys/types.h>
3 0:839f52ef7657 louridas
#include <sys/time.h>
4 0:839f52ef7657 louridas
5 0:839f52ef7657 louridas
/*  -------------------------------------------------------------------
6 0:839f52ef7657 louridas

7 0:839f52ef7657 louridas
    This function returns the wall clock time with micro seconds
8 0:839f52ef7657 louridas
    accuracy.
9 0:839f52ef7657 louridas
    The data type of the returned value is "double".
10 0:839f52ef7657 louridas

11 0:839f52ef7657 louridas
    The function can be called from a FORTRAN module. The value
12 0:839f52ef7657 louridas
    returned by cclock_ and cclock should be of type REAL(Kind = 8).
13 0:839f52ef7657 louridas

14 0:839f52ef7657 louridas
    -------------------------------------------------------------------
15 0:839f52ef7657 louridas
*/
16 0:839f52ef7657 louridas
17 0:839f52ef7657 louridas
double cclock_( void )
18 0:839f52ef7657 louridas
{
19 0:839f52ef7657 louridas
   const  double  micro = 1.0e-06;    /* Conversion constant */
20 0:839f52ef7657 louridas
   static long    start = 0L, startu;
21 0:839f52ef7657 louridas
   struct timeval tp;                       /* Structure used by gettimeofday */
22 0:839f52ef7657 louridas
   double         wall_time;          /* To hold the result */
23 0:839f52ef7657 louridas
24 0:839f52ef7657 louridas
25 0:839f52ef7657 louridas
   if ( gettimeofday( &tp, NULL) == -1 )
26 0:839f52ef7657 louridas
      wall_time = -1.0e0;
27 0:839f52ef7657 louridas
   else if( !start ) {
28 0:839f52ef7657 louridas
      start  = tp.tv_sec;
29 0:839f52ef7657 louridas
      startu = tp.tv_usec;
30 0:839f52ef7657 louridas
      wall_time = 0.0e0;
31 0:839f52ef7657 louridas
   }
32 0:839f52ef7657 louridas
   else
33 0:839f52ef7657 louridas
      wall_time = (double) (tp.tv_sec - start) + micro*(tp.tv_usec - startu);
34 0:839f52ef7657 louridas
35 0:839f52ef7657 louridas
   return wall_time;
36 0:839f52ef7657 louridas
}
37 0:839f52ef7657 louridas
38 0:839f52ef7657 louridas
39 0:839f52ef7657 louridas
double cclock( void )
40 0:839f52ef7657 louridas
{
41 0:839f52ef7657 louridas
   return cclock_();
42 0:839f52ef7657 louridas
}