1*c8281c7dSSatish Balay /* 2*c8281c7dSSatish Balay Low cost access to system time. This, in general, should not 3*c8281c7dSSatish Balay be included in user programs. 4*c8281c7dSSatish Balay */ 5*c8281c7dSSatish Balay 6*c8281c7dSSatish Balay #if !defined(__PTIME_H) 7*c8281c7dSSatish Balay #define __PTIME_H 8*c8281c7dSSatish Balay 9*c8281c7dSSatish Balay #include "petsc.h" 10*c8281c7dSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H) 11*c8281c7dSSatish Balay #include <sys/types.h> 12*c8281c7dSSatish Balay #include <sys/time.h> 13*c8281c7dSSatish Balay #endif 14*c8281c7dSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO) 15*c8281c7dSSatish Balay EXTERN_C_BEGIN 16*c8281c7dSSatish Balay EXTERN int gettimeofday(struct timeval *,struct timezone *); 17*c8281c7dSSatish Balay EXTERN_C_END 18*c8281c7dSSatish Balay #endif 19*c8281c7dSSatish Balay 20*c8281c7dSSatish Balay /* 21*c8281c7dSSatish Balay PetscTime - Returns the current time of day in seconds. 22*c8281c7dSSatish Balay 23*c8281c7dSSatish Balay Output Parameter: 24*c8281c7dSSatish Balay . v - time counter 25*c8281c7dSSatish Balay 26*c8281c7dSSatish Balay Synopsis: 27*c8281c7dSSatish Balay PetscTime(PetscLogDouble v) 28*c8281c7dSSatish Balay 29*c8281c7dSSatish Balay Usage: 30*c8281c7dSSatish Balay PetscLogDouble v; 31*c8281c7dSSatish Balay PetscTime(v); 32*c8281c7dSSatish Balay .... perform some calculation ... 33*c8281c7dSSatish Balay printf("Time for operation %g\n",v); 34*c8281c7dSSatish Balay 35*c8281c7dSSatish Balay Notes: 36*c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 37*c8281c7dSSatish Balay PetscTime() is intended only for timing of application codes. 38*c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 39*c8281c7dSSatish Balay PETSc library timing. See the users manual for further details. 40*c8281c7dSSatish Balay 41*c8281c7dSSatish Balay .seealso: PetscTimeSubtract(), PetscTimeAdd() 42*c8281c7dSSatish Balay 43*c8281c7dSSatish Balay .keywords: Petsc, time 44*c8281c7dSSatish Balay */ 45*c8281c7dSSatish Balay 46*c8281c7dSSatish Balay /* 47*c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 48*c8281c7dSSatish Balay the value v. 49*c8281c7dSSatish Balay 50*c8281c7dSSatish Balay Input Parameter: 51*c8281c7dSSatish Balay . v - time counter 52*c8281c7dSSatish Balay 53*c8281c7dSSatish Balay Output Parameter: 54*c8281c7dSSatish Balay . v - time counter (v = v - current time) 55*c8281c7dSSatish Balay 56*c8281c7dSSatish Balay Synopsis: 57*c8281c7dSSatish Balay PetscTimeSubtract(PetscLogDouble v) 58*c8281c7dSSatish Balay 59*c8281c7dSSatish Balay Notes: 60*c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 61*c8281c7dSSatish Balay PetscTimeSubtract() is intended only for timing of application codes. 62*c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 63*c8281c7dSSatish Balay PETSc library timing. See the users manual for further details. 64*c8281c7dSSatish Balay 65*c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeAdd() 66*c8281c7dSSatish Balay 67*c8281c7dSSatish Balay .keywords: Petsc, time, subtract 68*c8281c7dSSatish Balay */ 69*c8281c7dSSatish Balay 70*c8281c7dSSatish Balay /* 71*c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 72*c8281c7dSSatish Balay 73*c8281c7dSSatish Balay Input Parameter: 74*c8281c7dSSatish Balay . v - time counter 75*c8281c7dSSatish Balay 76*c8281c7dSSatish Balay Output Parameter: 77*c8281c7dSSatish Balay . v - time counter (v = v + current time) 78*c8281c7dSSatish Balay 79*c8281c7dSSatish Balay Synopsis: 80*c8281c7dSSatish Balay PetscTimeAdd(PetscLogDouble v) 81*c8281c7dSSatish Balay 82*c8281c7dSSatish Balay Notes: 83*c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 84*c8281c7dSSatish Balay PetscTimeAdd() is intended only for timing of application codes. 85*c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 86*c8281c7dSSatish Balay PETSc library timing. See the users manual for further details. 87*c8281c7dSSatish Balay 88*c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeSubtract() 89*c8281c7dSSatish Balay 90*c8281c7dSSatish Balay .keywords: Petsc, time, add 91*c8281c7dSSatish Balay */ 92*c8281c7dSSatish Balay 93*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 94*c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 95*c8281c7dSSatish Balay */ 96*c8281c7dSSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(_petsc_mpi_uni)) 97*c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 98*c8281c7dSSatish Balay 99*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 100*c8281c7dSSatish Balay 101*c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 102*c8281c7dSSatish Balay 103*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 104*c8281c7dSSatish Balay Power1,2,3,PC machines have a fast clock read_real_time() 105*c8281c7dSSatish Balay */ 106*c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 107*c8281c7dSSatish Balay EXTERN PetscLogDouble rs6000_time(void); 108*c8281c7dSSatish Balay #define PetscTime(v) (v)=rs6000_time(); 109*c8281c7dSSatish Balay 110*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=rs6000_time(); 111*c8281c7dSSatish Balay 112*c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=rs6000_time(); 113*c8281c7dSSatish Balay 114*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 115*c8281c7dSSatish Balay Dec Alpha has a very fast system clock accessible through getclock() 116*c8281c7dSSatish Balay getclock() doesn't seem to have a prototype for C++ 117*c8281c7dSSatish Balay */ 118*c8281c7dSSatish Balay #elif defined(PETSC_USE_GETCLOCK) 119*c8281c7dSSatish Balay EXTERN_C_BEGIN 120*c8281c7dSSatish Balay EXTERN int getclock(int clock_type,struct timespec *tp); 121*c8281c7dSSatish Balay EXTERN_C_END 122*c8281c7dSSatish Balay 123*c8281c7dSSatish Balay 124*c8281c7dSSatish Balay #define PetscTime(v) {static struct timespec _tp; \ 125*c8281c7dSSatish Balay getclock(TIMEOFDAY,&_tp); \ 126*c8281c7dSSatish Balay (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);} 127*c8281c7dSSatish Balay 128*c8281c7dSSatish Balay #define PetscTimeSubtract(v) {static struct timespec _tp; \ 129*c8281c7dSSatish Balay getclock(TIMEOFDAY,&_tp); \ 130*c8281c7dSSatish Balay (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);} 131*c8281c7dSSatish Balay 132*c8281c7dSSatish Balay #define PetscTimeAdd(v) {static struct timespec _tp; \ 133*c8281c7dSSatish Balay getclock(TIMEOFDAY,&_tp); \ 134*c8281c7dSSatish Balay (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);} 135*c8281c7dSSatish Balay 136*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 137*c8281c7dSSatish Balay ASCI RED machine has a fast clock accessiable through dclock() 138*c8281c7dSSatish Balay */ 139*c8281c7dSSatish Balay #elif defined (PETSC_USE_DCLOCK) 140*c8281c7dSSatish Balay EXTERN_C_BEGIN 141*c8281c7dSSatish Balay EXTERN PetscLogDouble dclock(); 142*c8281c7dSSatish Balay EXTERN_C_END 143*c8281c7dSSatish Balay 144*c8281c7dSSatish Balay #define PetscTime(v) (v)=dclock(); 145*c8281c7dSSatish Balay 146*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=dclock(); 147*c8281c7dSSatish Balay 148*c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=dclock(); 149*c8281c7dSSatish Balay 150*c8281c7dSSatish Balay 151*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 152*c8281c7dSSatish Balay Windows uses a special time code 153*c8281c7dSSatish Balay */ 154*c8281c7dSSatish Balay #elif defined (PETSC_USE_NT_TIME) 155*c8281c7dSSatish Balay #include <time.h> 156*c8281c7dSSatish Balay EXTERN PetscLogDouble nt_time(void); 157*c8281c7dSSatish Balay #define PetscTime(v) (v)=nt_time(); 158*c8281c7dSSatish Balay 159*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=nt_time(); 160*c8281c7dSSatish Balay 161*c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=nt_time(); 162*c8281c7dSSatish Balay 163*c8281c7dSSatish Balay /* ------------------------------------------------------------------ 164*c8281c7dSSatish Balay The usual Unix time routines. 165*c8281c7dSSatish Balay */ 166*c8281c7dSSatish Balay #else 167*c8281c7dSSatish Balay #define PetscTime(v) {static struct timeval _tp; \ 168*c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0);\ 169*c8281c7dSSatish Balay (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);} 170*c8281c7dSSatish Balay 171*c8281c7dSSatish Balay #define PetscTimeSubtract(v) {static struct timeval _tp; \ 172*c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0);\ 173*c8281c7dSSatish Balay (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);} 174*c8281c7dSSatish Balay 175*c8281c7dSSatish Balay #define PetscTimeAdd(v) {static struct timeval _tp; \ 176*c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0);\ 177*c8281c7dSSatish Balay (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);} 178*c8281c7dSSatish Balay #endif 179*c8281c7dSSatish Balay 180*c8281c7dSSatish Balay #endif 181*c8281c7dSSatish Balay 182*c8281c7dSSatish Balay 183*c8281c7dSSatish Balay 184*c8281c7dSSatish Balay 185*c8281c7dSSatish Balay 186