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) 14c8281c7dSSatish Balay EXTERN_C_BEGIN 1509573ac7SBarry Smith extern int gettimeofday(struct timeval *,struct timezone *); 16c8281c7dSSatish Balay EXTERN_C_END 17c8281c7dSSatish Balay #endif 18c8281c7dSSatish Balay 1930a8c558SMatthew Knepley /* Global counters */ 20014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime; 2130a8c558SMatthew Knepley 22*39975667SBarry Smith /*MC 23c8281c7dSSatish Balay PetscTime - Returns the current time of day in seconds. 24c8281c7dSSatish Balay 25eca87e8dSBarry Smith Synopsis: 26f2ba6396SBarry Smith #include "petsctime.h" 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 41*39975667SBarry Smith Level: developer 42*39975667SBarry Smith 43c8281c7dSSatish Balay Notes: 44c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 45*39975667SBarry Smith we do not recomment every using PetscTime() 46*39975667SBarry Smith The options database command -log_summary activate 470598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 48c8281c7dSSatish Balay 49*39975667SBarry Smith .seealso: PetscTimeSubtract(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 50c8281c7dSSatish Balay 51c8281c7dSSatish Balay .keywords: Petsc, time 52*39975667SBarry Smith M*/ 53c8281c7dSSatish Balay 54*39975667SBarry Smith /*MC 55c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 56c8281c7dSSatish Balay the value v. 57c8281c7dSSatish Balay 58eca87e8dSBarry Smith Synopsis: 59f2ba6396SBarry Smith #include "petsctime.h" 60eca87e8dSBarry Smith PetscTimeSubtract(PetscLogDouble v) 61eca87e8dSBarry Smith 62eca87e8dSBarry Smith Not Collective 63eca87e8dSBarry Smith 64c8281c7dSSatish Balay Input Parameter: 65c8281c7dSSatish Balay . v - time counter 66c8281c7dSSatish Balay 67c8281c7dSSatish Balay Output Parameter: 68c8281c7dSSatish Balay . v - time counter (v = v - current time) 69c8281c7dSSatish Balay 70*39975667SBarry Smith Level: developer 71c8281c7dSSatish Balay 72c8281c7dSSatish Balay Notes: 73c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 74*39975667SBarry Smith we do not every recommend using PetscTimeSubtract() 75*39975667SBarry Smith The options database command -log_summary activates 76*39975667SBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details, also 77*39975667SBarry Smith see PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() for how to register 78*39975667SBarry Smith stages and events in application codes. 79c8281c7dSSatish Balay 80*39975667SBarry Smith .seealso: PetscTime(), PetscTimeAdd(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 81c8281c7dSSatish Balay 82c8281c7dSSatish Balay .keywords: Petsc, time, subtract 83*39975667SBarry Smith M*/ 84c8281c7dSSatish Balay 85*39975667SBarry Smith /*MC 86c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 87c8281c7dSSatish Balay 88eca87e8dSBarry Smith Synopsis: 89f2ba6396SBarry Smith #include "petsctime.h" 90eca87e8dSBarry Smith PetscTimeAdd(PetscLogDouble v) 91eca87e8dSBarry Smith 92eca87e8dSBarry Smith Not Collective 93eca87e8dSBarry Smith 94c8281c7dSSatish Balay Input Parameter: 95c8281c7dSSatish Balay . v - time counter 96c8281c7dSSatish Balay 97c8281c7dSSatish Balay Output Parameter: 98c8281c7dSSatish Balay . v - time counter (v = v + current time) 99c8281c7dSSatish Balay 100*39975667SBarry Smith Level: developer 101*39975667SBarry Smith 102c8281c7dSSatish Balay Notes: 103c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 104*39975667SBarry Smith we do not ever recommend using PetscTimeAdd(). 105af4f1f30SBarry Smith The options database command -log_summary activate 1060598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 107c8281c7dSSatish Balay 108*39975667SBarry Smith .seealso: PetscTime(), PetscTimeSubtract(), PetscLogStageRegister(), PetscLogEventRegister(), PetscLogEventBegin(), PetscLogEventEnd() 109c8281c7dSSatish Balay 110c8281c7dSSatish Balay .keywords: Petsc, time, add 111*39975667SBarry Smith M*/ 112c8281c7dSSatish Balay 113c8281c7dSSatish Balay /* ------------------------------------------------------------------ 114c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 115c8281c7dSSatish Balay */ 116c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H)) 117c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 118c8281c7dSSatish Balay 119c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 120c8281c7dSSatish Balay 121c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 122c8281c7dSSatish Balay 123c8281c7dSSatish Balay /* ------------------------------------------------------------------ 124bea725cfSBarry Smith IBM Power and PowerPC machines have a fast clock read_real_time() 125c8281c7dSSatish Balay */ 126c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 127bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void); 128bea725cfSBarry Smith #define PetscTime(v) (v)=PetscReadRealTime(); 129c8281c7dSSatish Balay 130bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscReadRealTime(); 131c8281c7dSSatish Balay 132bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscReadRealTime(); 133c8281c7dSSatish Balay 134c8281c7dSSatish Balay /* ------------------------------------------------------------------ 135bea725cfSBarry Smith Microsoft Windows has its own time routines 136c8281c7dSSatish Balay */ 137bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME) 138c8281c7dSSatish Balay #include <time.h> 1390f1eeb8eSSatish Balay EXTERN_C_BEGIN 140bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void); 1410f1eeb8eSSatish Balay EXTERN_C_END 142bea725cfSBarry Smith #define PetscTime(v) (v)=PetscMicrosoftTime(); 143c8281c7dSSatish Balay 144bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscMicrosoftTime(); 145c8281c7dSSatish Balay 146bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscMicrosoftTime(); 147c8281c7dSSatish Balay 148c8281c7dSSatish Balay /* ------------------------------------------------------------------ 149c8281c7dSSatish Balay The usual Unix time routines. 150c8281c7dSSatish Balay */ 151c8281c7dSSatish Balay #else 1522798158cSJed Brown #define PetscTime(v) do { \ 1532798158cSJed Brown static struct timeval _tp; \ 154c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1552798158cSJed Brown (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1562798158cSJed Brown } while (0) 157c8281c7dSSatish Balay 1582798158cSJed Brown #define PetscTimeSubtract(v) do { \ 1592798158cSJed Brown static struct timeval _tp; \ 160c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1612798158cSJed Brown (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1622798158cSJed Brown } while (0) 163c8281c7dSSatish Balay 1642798158cSJed Brown #define PetscTimeAdd(v) do { \ 1652798158cSJed Brown static struct timeval _tp; \ 166c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1672798158cSJed Brown (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1682798158cSJed Brown } while (0) 169c8281c7dSSatish Balay #endif 170c8281c7dSSatish Balay 171c8281c7dSSatish Balay #endif 172c8281c7dSSatish Balay 173c8281c7dSSatish Balay 174c8281c7dSSatish Balay 175c8281c7dSSatish Balay 176c8281c7dSSatish Balay 177