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 8c8281c7dSSatish Balay 92c8e378dSBarry Smith #include <petscsys.h> 10c8281c7dSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H) 11c8281c7dSSatish Balay #include <sys/time.h> 12c8281c7dSSatish Balay #endif 13c8281c7dSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO) 14*8cc058d9SJed Brown PETSC_EXTERN int gettimeofday(struct timeval *,struct timezone *); 15c8281c7dSSatish Balay #endif 16c8281c7dSSatish Balay 1730a8c558SMatthew Knepley /* Global counters */ 18014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime; 1930a8c558SMatthew Knepley 2039975667SBarry Smith /*MC 21c8281c7dSSatish Balay PetscTime - Returns the current time of day in seconds. 22c8281c7dSSatish Balay 23eca87e8dSBarry Smith Synopsis: 24f2ba6396SBarry Smith #include "petsctime.h" 25eca87e8dSBarry Smith PetscTime(PetscLogDouble v) 26eca87e8dSBarry Smith 27eca87e8dSBarry Smith Not Collective 28eca87e8dSBarry Smith 29c8281c7dSSatish Balay Output Parameter: 30c8281c7dSSatish Balay . v - time counter 31c8281c7dSSatish Balay 32c8281c7dSSatish Balay 33c8281c7dSSatish Balay Usage: 34c8281c7dSSatish Balay PetscLogDouble v; 35c8281c7dSSatish Balay PetscTime(v); 36c8281c7dSSatish Balay .... perform some calculation ... 37c8281c7dSSatish Balay printf("Time for operation %g\n",v); 38c8281c7dSSatish Balay 3939975667SBarry Smith Level: developer 4039975667SBarry Smith 41c8281c7dSSatish Balay Notes: 42c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 4339975667SBarry Smith we do not recomment every using PetscTime() 4439975667SBarry Smith The options database command -log_summary activate 450598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 46c8281c7dSSatish Balay 4739975667SBarry Smith .seealso: PetscTimeSubtract(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 48c8281c7dSSatish Balay 49c8281c7dSSatish Balay .keywords: Petsc, time 5039975667SBarry Smith M*/ 51c8281c7dSSatish Balay 5239975667SBarry Smith /*MC 53c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 54c8281c7dSSatish Balay the value v. 55c8281c7dSSatish Balay 56eca87e8dSBarry Smith Synopsis: 57f2ba6396SBarry Smith #include "petsctime.h" 58eca87e8dSBarry Smith PetscTimeSubtract(PetscLogDouble v) 59eca87e8dSBarry Smith 60eca87e8dSBarry Smith Not Collective 61eca87e8dSBarry Smith 62c8281c7dSSatish Balay Input Parameter: 63c8281c7dSSatish Balay . v - time counter 64c8281c7dSSatish Balay 65c8281c7dSSatish Balay Output Parameter: 66c8281c7dSSatish Balay . v - time counter (v = v - current time) 67c8281c7dSSatish Balay 6839975667SBarry Smith Level: developer 69c8281c7dSSatish Balay 70c8281c7dSSatish Balay Notes: 71c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 7239975667SBarry Smith we do not every recommend using PetscTimeSubtract() 7339975667SBarry Smith The options database command -log_summary activates 7439975667SBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details, also 7539975667SBarry Smith see PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() for how to register 7639975667SBarry Smith stages and events in application codes. 77c8281c7dSSatish Balay 7839975667SBarry Smith .seealso: PetscTime(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 79c8281c7dSSatish Balay 80c8281c7dSSatish Balay .keywords: Petsc, time, subtract 8139975667SBarry Smith M*/ 82c8281c7dSSatish Balay 8339975667SBarry Smith /*MC 84c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 85c8281c7dSSatish Balay 86eca87e8dSBarry Smith Synopsis: 87f2ba6396SBarry Smith #include "petsctime.h" 88eca87e8dSBarry Smith PetscTimeAdd(PetscLogDouble v) 89eca87e8dSBarry Smith 90eca87e8dSBarry Smith Not Collective 91eca87e8dSBarry Smith 92c8281c7dSSatish Balay Input Parameter: 93c8281c7dSSatish Balay . v - time counter 94c8281c7dSSatish Balay 95c8281c7dSSatish Balay Output Parameter: 96c8281c7dSSatish Balay . v - time counter (v = v + current time) 97c8281c7dSSatish Balay 9839975667SBarry Smith Level: developer 9939975667SBarry Smith 100c8281c7dSSatish Balay Notes: 101c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 10239975667SBarry Smith we do not ever recommend using PetscTimeAdd(). 103af4f1f30SBarry Smith The options database command -log_summary activate 1040598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 105c8281c7dSSatish Balay 10639975667SBarry Smith .seealso: PetscTime(), PetscTimeSubtract(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 107c8281c7dSSatish Balay 108c8281c7dSSatish Balay .keywords: Petsc, time, add 10939975667SBarry Smith M*/ 110c8281c7dSSatish Balay 111c8281c7dSSatish Balay /* ------------------------------------------------------------------ 112c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 113c8281c7dSSatish Balay */ 114c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H)) 115c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 116c8281c7dSSatish Balay 117c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 118c8281c7dSSatish Balay 119c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 120c8281c7dSSatish Balay 121c8281c7dSSatish Balay /* ------------------------------------------------------------------ 122bea725cfSBarry Smith IBM Power and PowerPC machines have a fast clock read_real_time() 123c8281c7dSSatish Balay */ 124c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 125bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void); 126bea725cfSBarry Smith #define PetscTime(v) (v)=PetscReadRealTime(); 127c8281c7dSSatish Balay 128bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscReadRealTime(); 129c8281c7dSSatish Balay 130bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscReadRealTime(); 131c8281c7dSSatish Balay 132c8281c7dSSatish Balay /* ------------------------------------------------------------------ 133bea725cfSBarry Smith Microsoft Windows has its own time routines 134c8281c7dSSatish Balay */ 135bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME) 136c8281c7dSSatish Balay #include <time.h> 137*8cc058d9SJed Brown PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void); 138bea725cfSBarry Smith #define PetscTime(v) (v)=PetscMicrosoftTime(); 139c8281c7dSSatish Balay 140bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscMicrosoftTime(); 141c8281c7dSSatish Balay 142bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscMicrosoftTime(); 143c8281c7dSSatish Balay 144c8281c7dSSatish Balay /* ------------------------------------------------------------------ 145c8281c7dSSatish Balay The usual Unix time routines. 146c8281c7dSSatish Balay */ 147c8281c7dSSatish Balay #else 1482798158cSJed Brown #define PetscTime(v) do { \ 1492798158cSJed Brown static struct timeval _tp; \ 150c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1512798158cSJed Brown (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1522798158cSJed Brown } while (0) 153c8281c7dSSatish Balay 1542798158cSJed Brown #define PetscTimeSubtract(v) do { \ 1552798158cSJed Brown static struct timeval _tp; \ 156c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1572798158cSJed Brown (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1582798158cSJed Brown } while (0) 159c8281c7dSSatish Balay 1602798158cSJed Brown #define PetscTimeAdd(v) do { \ 1612798158cSJed Brown static struct timeval _tp; \ 162c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1632798158cSJed Brown (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1642798158cSJed Brown } while (0) 165c8281c7dSSatish Balay #endif 166c8281c7dSSatish Balay 167c8281c7dSSatish Balay #endif 168c8281c7dSSatish Balay 169c8281c7dSSatish Balay 170c8281c7dSSatish Balay 171c8281c7dSSatish Balay 172c8281c7dSSatish Balay 173