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