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 | } |