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 9d382aafbSBarry Smith #include "petscsys.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 1609573ac7SBarry Smith extern int gettimeofday(struct timeval *,struct timezone *); 17c8281c7dSSatish Balay EXTERN_C_END 18c8281c7dSSatish Balay #endif 19c8281c7dSSatish Balay 2030a8c558SMatthew Knepley /* Global counters */ 21*014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime; 2230a8c558SMatthew Knepley 23c8281c7dSSatish Balay /* 24c8281c7dSSatish Balay PetscTime - Returns the current time of day in seconds. 25c8281c7dSSatish Balay 26eca87e8dSBarry Smith Synopsis: 27eca87e8dSBarry Smith PetscTime(PetscLogDouble v) 28eca87e8dSBarry Smith 29eca87e8dSBarry Smith Not Collective 30eca87e8dSBarry Smith 31c8281c7dSSatish Balay Output Parameter: 32c8281c7dSSatish Balay . v - time counter 33c8281c7dSSatish Balay 34c8281c7dSSatish Balay 35c8281c7dSSatish Balay Usage: 36c8281c7dSSatish Balay PetscLogDouble v; 37c8281c7dSSatish Balay PetscTime(v); 38c8281c7dSSatish Balay .... perform some calculation ... 39c8281c7dSSatish Balay printf("Time for operation %g\n",v); 40c8281c7dSSatish Balay 41c8281c7dSSatish Balay Notes: 42c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 43c8281c7dSSatish Balay PetscTime() is intended only for timing of application codes. 44c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 450598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 46c8281c7dSSatish Balay 47c8281c7dSSatish Balay .seealso: PetscTimeSubtract(), PetscTimeAdd() 48c8281c7dSSatish Balay 49c8281c7dSSatish Balay .keywords: Petsc, time 50c8281c7dSSatish Balay */ 51c8281c7dSSatish Balay 52c8281c7dSSatish Balay /* 53c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 54c8281c7dSSatish Balay the value v. 55c8281c7dSSatish Balay 56eca87e8dSBarry Smith Synopsis: 57eca87e8dSBarry Smith PetscTimeSubtract(PetscLogDouble v) 58eca87e8dSBarry Smith 59eca87e8dSBarry Smith Not Collective 60eca87e8dSBarry Smith 61c8281c7dSSatish Balay Input Parameter: 62c8281c7dSSatish Balay . v - time counter 63c8281c7dSSatish Balay 64c8281c7dSSatish Balay Output Parameter: 65c8281c7dSSatish Balay . v - time counter (v = v - current time) 66c8281c7dSSatish Balay 67c8281c7dSSatish Balay 68c8281c7dSSatish Balay Notes: 69c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 70c8281c7dSSatish Balay PetscTimeSubtract() is intended only for timing of application codes. 71c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 720598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 73c8281c7dSSatish Balay 74c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeAdd() 75c8281c7dSSatish Balay 76c8281c7dSSatish Balay .keywords: Petsc, time, subtract 77c8281c7dSSatish Balay */ 78c8281c7dSSatish Balay 79c8281c7dSSatish Balay /* 80c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 81c8281c7dSSatish Balay 82eca87e8dSBarry Smith Synopsis: 83eca87e8dSBarry Smith PetscTimeAdd(PetscLogDouble v) 84eca87e8dSBarry Smith 85eca87e8dSBarry Smith Not Collective 86eca87e8dSBarry Smith 87c8281c7dSSatish Balay Input Parameter: 88c8281c7dSSatish Balay . v - time counter 89c8281c7dSSatish Balay 90c8281c7dSSatish Balay Output Parameter: 91c8281c7dSSatish Balay . v - time counter (v = v + current time) 92c8281c7dSSatish Balay 93c8281c7dSSatish Balay Notes: 94c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 95c8281c7dSSatish Balay PetscTimeAdd() is intended only for timing of application codes. 96c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 970598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 98c8281c7dSSatish Balay 99c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeSubtract() 100c8281c7dSSatish Balay 101c8281c7dSSatish Balay .keywords: Petsc, time, add 102c8281c7dSSatish Balay */ 103c8281c7dSSatish Balay 104c8281c7dSSatish Balay /* ------------------------------------------------------------------ 105c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 106c8281c7dSSatish Balay */ 107c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H)) 108c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 109c8281c7dSSatish Balay 110c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 111c8281c7dSSatish Balay 112c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 113c8281c7dSSatish Balay 114c8281c7dSSatish Balay /* ------------------------------------------------------------------ 115c8281c7dSSatish Balay Power1,2,3,PC machines have a fast clock read_real_time() 116c8281c7dSSatish Balay */ 117c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 118*014dd563SJed Brown PETSC_EXTERN PetscLogDouble rs6000_time(void); 119c8281c7dSSatish Balay #define PetscTime(v) (v)=rs6000_time(); 120c8281c7dSSatish Balay 121c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=rs6000_time(); 122c8281c7dSSatish Balay 123c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=rs6000_time(); 124c8281c7dSSatish Balay 125c8281c7dSSatish Balay /* ------------------------------------------------------------------ 126c8281c7dSSatish Balay Dec Alpha has a very fast system clock accessible through getclock() 127c8281c7dSSatish Balay getclock() doesn't seem to have a prototype for C++ 128c8281c7dSSatish Balay */ 129c8281c7dSSatish Balay #elif defined(PETSC_USE_GETCLOCK) 130c8281c7dSSatish Balay EXTERN_C_BEGIN 13109573ac7SBarry Smith extern int getclock(int clock_type,struct timespec *tp); 132c8281c7dSSatish Balay EXTERN_C_END 133c8281c7dSSatish Balay 134c8281c7dSSatish Balay 135c8281c7dSSatish Balay #define PetscTime(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 #define PetscTimeSubtract(v) {static struct timespec _tp; \ 140c8281c7dSSatish Balay getclock(TIMEOFDAY,&_tp); \ 141c8281c7dSSatish Balay (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);} 142c8281c7dSSatish Balay 143c8281c7dSSatish Balay #define PetscTimeAdd(v) {static struct timespec _tp; \ 144c8281c7dSSatish Balay getclock(TIMEOFDAY,&_tp); \ 145c8281c7dSSatish Balay (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);} 146c8281c7dSSatish Balay 147c8281c7dSSatish Balay /* ------------------------------------------------------------------ 148c8281c7dSSatish Balay ASCI RED machine has a fast clock accessiable through dclock() 149c8281c7dSSatish Balay */ 150c8281c7dSSatish Balay #elif defined (PETSC_USE_DCLOCK) 151c8281c7dSSatish Balay EXTERN_C_BEGIN 152*014dd563SJed Brown PETSC_EXTERN PetscLogDouble dclock(); 153c8281c7dSSatish Balay EXTERN_C_END 154c8281c7dSSatish Balay 155c8281c7dSSatish Balay #define PetscTime(v) (v)=dclock(); 156c8281c7dSSatish Balay 157c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=dclock(); 158c8281c7dSSatish Balay 159c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=dclock(); 160c8281c7dSSatish Balay 161c8281c7dSSatish Balay 162c8281c7dSSatish Balay /* ------------------------------------------------------------------ 163c8281c7dSSatish Balay Windows uses a special time code 164c8281c7dSSatish Balay */ 165c8281c7dSSatish Balay #elif defined (PETSC_USE_NT_TIME) 166c8281c7dSSatish Balay #include <time.h> 1670f1eeb8eSSatish Balay EXTERN_C_BEGIN 168*014dd563SJed Brown PETSC_EXTERN PetscLogDouble nt_time(void); 1690f1eeb8eSSatish Balay EXTERN_C_END 170c8281c7dSSatish Balay #define PetscTime(v) (v)=nt_time(); 171c8281c7dSSatish Balay 172c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=nt_time(); 173c8281c7dSSatish Balay 174c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=nt_time(); 175c8281c7dSSatish Balay 176c8281c7dSSatish Balay /* ------------------------------------------------------------------ 177c8281c7dSSatish Balay The usual Unix time routines. 178c8281c7dSSatish Balay */ 179c8281c7dSSatish Balay #else 1802798158cSJed Brown #define PetscTime(v) do { \ 1812798158cSJed Brown static struct timeval _tp; \ 182c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1832798158cSJed Brown (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1842798158cSJed Brown } while (0) 185c8281c7dSSatish Balay 1862798158cSJed Brown #define PetscTimeSubtract(v) do { \ 1872798158cSJed Brown static struct timeval _tp; \ 188c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1892798158cSJed Brown (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1902798158cSJed Brown } while (0) 191c8281c7dSSatish Balay 1922798158cSJed Brown #define PetscTimeAdd(v) do { \ 1932798158cSJed Brown static struct timeval _tp; \ 194c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1952798158cSJed Brown (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1962798158cSJed Brown } while (0) 197c8281c7dSSatish Balay #endif 198c8281c7dSSatish Balay 199c8281c7dSSatish Balay #endif 200c8281c7dSSatish Balay 201c8281c7dSSatish Balay 202c8281c7dSSatish Balay 203c8281c7dSSatish Balay 204c8281c7dSSatish Balay 205