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