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 6a663daf8SBarry Smith #if !defined(__PETSCTIME_H) 7a663daf8SBarry Smith #define __PETSCTIME_H 82c8e378dSBarry Smith #include <petscsys.h> 9*8563dfccSBarry Smith 10*8563dfccSBarry Smith PETSC_EXTERN PetscErrorCode PetscGetCPUTime(PetscLogDouble*); 11c8281c7dSSatish Balay 1230a8c558SMatthew Knepley /* Global counters */ 13014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime; 1430a8c558SMatthew Knepley 1539975667SBarry Smith /*MC 16c8281c7dSSatish Balay PetscTime - Returns the current time of day in seconds. 17c8281c7dSSatish Balay 18eca87e8dSBarry Smith Synopsis: 19f2ba6396SBarry Smith #include "petsctime.h" 20*8563dfccSBarry Smith PetscTime(PetscLogDouble *v) 21eca87e8dSBarry Smith 22eca87e8dSBarry Smith Not Collective 23eca87e8dSBarry Smith 24c8281c7dSSatish Balay Output Parameter: 25c8281c7dSSatish Balay . v - time counter 26c8281c7dSSatish Balay 27c8281c7dSSatish Balay 28c8281c7dSSatish Balay Usage: 29c8281c7dSSatish Balay PetscLogDouble v; 30*8563dfccSBarry Smith PetscTime(&v); 31c8281c7dSSatish Balay .... perform some calculation ... 32c8281c7dSSatish Balay printf("Time for operation %g\n",v); 33c8281c7dSSatish Balay 3439975667SBarry Smith Level: developer 3539975667SBarry Smith 36c8281c7dSSatish Balay Notes: 37c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 3839975667SBarry Smith we do not recomment every using PetscTime() 3939975667SBarry Smith The options database command -log_summary activate 400598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 41c8281c7dSSatish Balay 4239975667SBarry Smith .seealso: PetscTimeSubtract(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 43c8281c7dSSatish Balay 44c8281c7dSSatish Balay .keywords: Petsc, time 4539975667SBarry Smith M*/ 46c8281c7dSSatish Balay 4739975667SBarry Smith /*MC 48c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 49c8281c7dSSatish Balay the value v. 50c8281c7dSSatish Balay 51eca87e8dSBarry Smith Synopsis: 52f2ba6396SBarry Smith #include "petsctime.h" 53*8563dfccSBarry Smith PetscTimeSubtract(&PetscLogDouble *v) 54eca87e8dSBarry Smith 55eca87e8dSBarry Smith Not Collective 56eca87e8dSBarry Smith 57c8281c7dSSatish Balay Input Parameter: 58c8281c7dSSatish Balay . v - time counter 59c8281c7dSSatish Balay 60c8281c7dSSatish Balay Output Parameter: 61c8281c7dSSatish Balay . v - time counter (v = v - current time) 62c8281c7dSSatish Balay 6339975667SBarry Smith Level: developer 64c8281c7dSSatish Balay 65c8281c7dSSatish Balay Notes: 66c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 6739975667SBarry Smith we do not every recommend using PetscTimeSubtract() 6839975667SBarry Smith The options database command -log_summary activates 6939975667SBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details, also 7039975667SBarry Smith see PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() for how to register 7139975667SBarry Smith stages and events in application codes. 72c8281c7dSSatish Balay 7339975667SBarry Smith .seealso: PetscTime(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 74c8281c7dSSatish Balay 75c8281c7dSSatish Balay .keywords: Petsc, time, subtract 7639975667SBarry Smith M*/ 77c8281c7dSSatish Balay 7839975667SBarry Smith /*MC 79c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 80c8281c7dSSatish Balay 81eca87e8dSBarry Smith Synopsis: 82f2ba6396SBarry Smith #include "petsctime.h" 83*8563dfccSBarry 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 9339975667SBarry Smith Level: developer 9439975667SBarry Smith 95c8281c7dSSatish Balay Notes: 96c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 9739975667SBarry Smith we do not ever recommend using PetscTimeAdd(). 98af4f1f30SBarry Smith The options database command -log_summary activate 990598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 100c8281c7dSSatish Balay 10139975667SBarry Smith .seealso: PetscTime(), PetscTimeSubtract(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 102c8281c7dSSatish Balay 103c8281c7dSSatish Balay .keywords: Petsc, time, add 10439975667SBarry Smith M*/ 105c8281c7dSSatish Balay 106c8281c7dSSatish Balay /* ------------------------------------------------------------------ 107c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 108c8281c7dSSatish Balay */ 109c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H)) 110*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 111*8563dfccSBarry Smith { 112*8563dfccSBarry Smith *v = MPI_Wtime(); 113*8563dfccSBarry Smith return 0; 114*8563dfccSBarry Smith } 115c8281c7dSSatish Balay 116*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 117*8563dfccSBarry Smith { 118*8563dfccSBarry Smith *v -= MPI_Wtime(); 119*8563dfccSBarry Smith return 0; 120*8563dfccSBarry Smith } 121c8281c7dSSatish Balay 122*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 123*8563dfccSBarry Smith { 124*8563dfccSBarry Smith *v += MPI_Wtime(); 125*8563dfccSBarry Smith return 0; 126*8563dfccSBarry Smith } 127c8281c7dSSatish Balay 128c8281c7dSSatish Balay /* ------------------------------------------------------------------ 129bea725cfSBarry Smith IBM Power and PowerPC machines have a fast clock read_real_time() 130c8281c7dSSatish Balay */ 131c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 132bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void); 133c8281c7dSSatish Balay 134*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 135*8563dfccSBarry Smith { 136*8563dfccSBarry Smith *v = PetscReadRealTime(); 137*8563dfccSBarry Smith return 0; 138*8563dfccSBarry Smith } 139c8281c7dSSatish Balay 140*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 141*8563dfccSBarry Smith { 142*8563dfccSBarry Smith *v -= PetscReadRealTime(); 143*8563dfccSBarry Smith return 0; 144*8563dfccSBarry Smith } 145*8563dfccSBarry Smith 146*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 147*8563dfccSBarry Smith { 148*8563dfccSBarry Smith *v += PetscReadRealTime(); 149*8563dfccSBarry Smith return 0; 150*8563dfccSBarry Smith } 151c8281c7dSSatish Balay 152c8281c7dSSatish Balay /* ------------------------------------------------------------------ 153bea725cfSBarry Smith Microsoft Windows has its own time routines 154c8281c7dSSatish Balay */ 155bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME) 156c8281c7dSSatish Balay #include <time.h> 1578cc058d9SJed Brown PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void); 158c8281c7dSSatish Balay 159*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 160*8563dfccSBarry Smith { 161*8563dfccSBarry Smith *v = PetscMicrosoftTime(); 162*8563dfccSBarry Smith return 0; 163*8563dfccSBarry Smith } 164c8281c7dSSatish Balay 165*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 166*8563dfccSBarry Smith { 167*8563dfccSBarry Smith *v -= PetscMicrosoftTime(); 168*8563dfccSBarry Smith return 0; 169*8563dfccSBarry Smith } 170*8563dfccSBarry Smith 171*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 172*8563dfccSBarry Smith { 173*8563dfccSBarry Smith *v += PetscMicrosoftTime(); 174*8563dfccSBarry Smith return 0; 175*8563dfccSBarry Smith } 176c8281c7dSSatish Balay 177c8281c7dSSatish Balay /* ------------------------------------------------------------------ 178c8281c7dSSatish Balay The usual Unix time routines. 179c8281c7dSSatish Balay */ 180c8281c7dSSatish Balay #else 181c8281c7dSSatish Balay 182*8563dfccSBarry Smith #if defined(PETSC_HAVE_SYS_TIME_H) 183*8563dfccSBarry Smith #include <sys/time.h> 184*8563dfccSBarry Smith #endif 185c8281c7dSSatish Balay 186*8563dfccSBarry Smith #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO) 187*8563dfccSBarry Smith PETSC_EXTERN int gettimeofday(struct timeval *,struct timezone *); 188*8563dfccSBarry Smith #endif 189*8563dfccSBarry Smith 190*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 191*8563dfccSBarry Smith { 192*8563dfccSBarry Smith static struct timeval _tp; 193*8563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 194*8563dfccSBarry Smith *v = ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 195*8563dfccSBarry Smith return 0; 196*8563dfccSBarry Smith } 197*8563dfccSBarry Smith 198*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 199*8563dfccSBarry Smith { 200*8563dfccSBarry Smith static struct timeval _tp; 201*8563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 202*8563dfccSBarry Smith *v -= ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 203*8563dfccSBarry Smith return 0; 204*8563dfccSBarry Smith } 205*8563dfccSBarry Smith 206*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 207*8563dfccSBarry Smith { 208*8563dfccSBarry Smith static struct timeval _tp; 209*8563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 210*8563dfccSBarry Smith *v += ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 211*8563dfccSBarry Smith return 0; 212*8563dfccSBarry Smith } 213*8563dfccSBarry Smith 214c8281c7dSSatish Balay #endif 215c8281c7dSSatish Balay 216c8281c7dSSatish Balay #endif 217c8281c7dSSatish Balay 218c8281c7dSSatish Balay 219c8281c7dSSatish Balay 220