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 92c8e378dSBarry 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 */ 21014dd563SJed 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: 27f2ba6396SBarry Smith #include "petsctime.h" 28eca87e8dSBarry Smith PetscTime(PetscLogDouble v) 29eca87e8dSBarry Smith 30eca87e8dSBarry Smith Not Collective 31eca87e8dSBarry Smith 32c8281c7dSSatish Balay Output Parameter: 33c8281c7dSSatish Balay . v - time counter 34c8281c7dSSatish Balay 35c8281c7dSSatish Balay 36c8281c7dSSatish Balay Usage: 37c8281c7dSSatish Balay PetscLogDouble v; 38c8281c7dSSatish Balay PetscTime(v); 39c8281c7dSSatish Balay .... perform some calculation ... 40c8281c7dSSatish Balay printf("Time for operation %g\n",v); 41c8281c7dSSatish Balay 42c8281c7dSSatish Balay Notes: 43c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 44c8281c7dSSatish Balay PetscTime() is intended only for timing of application codes. 45c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 460598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 47c8281c7dSSatish Balay 48c8281c7dSSatish Balay .seealso: PetscTimeSubtract(), PetscTimeAdd() 49c8281c7dSSatish Balay 50c8281c7dSSatish Balay .keywords: Petsc, time 51c8281c7dSSatish Balay */ 52c8281c7dSSatish Balay 53c8281c7dSSatish Balay /* 54c8281c7dSSatish Balay PetscTimeSubtract - Subtracts the current time of day (in seconds) from 55c8281c7dSSatish Balay the value v. 56c8281c7dSSatish Balay 57eca87e8dSBarry Smith Synopsis: 58f2ba6396SBarry Smith #include "petsctime.h" 59eca87e8dSBarry Smith PetscTimeSubtract(PetscLogDouble v) 60eca87e8dSBarry Smith 61eca87e8dSBarry Smith Not Collective 62eca87e8dSBarry Smith 63c8281c7dSSatish Balay Input Parameter: 64c8281c7dSSatish Balay . v - time counter 65c8281c7dSSatish Balay 66c8281c7dSSatish Balay Output Parameter: 67c8281c7dSSatish Balay . v - time counter (v = v - current time) 68c8281c7dSSatish Balay 69c8281c7dSSatish Balay 70c8281c7dSSatish Balay Notes: 71c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 72c8281c7dSSatish Balay PetscTimeSubtract() is intended only for timing of application codes. 73c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 740598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 75c8281c7dSSatish Balay 76c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeAdd() 77c8281c7dSSatish Balay 78c8281c7dSSatish Balay .keywords: Petsc, time, subtract 79c8281c7dSSatish Balay */ 80c8281c7dSSatish Balay 81c8281c7dSSatish Balay /* 82c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 83c8281c7dSSatish Balay 84eca87e8dSBarry Smith Synopsis: 85f2ba6396SBarry Smith #include "petsctime.h" 86eca87e8dSBarry Smith PetscTimeAdd(PetscLogDouble v) 87eca87e8dSBarry Smith 88eca87e8dSBarry Smith Not Collective 89eca87e8dSBarry Smith 90c8281c7dSSatish Balay Input Parameter: 91c8281c7dSSatish Balay . v - time counter 92c8281c7dSSatish Balay 93c8281c7dSSatish Balay Output Parameter: 94c8281c7dSSatish Balay . v - time counter (v = v + current time) 95c8281c7dSSatish Balay 96c8281c7dSSatish Balay Notes: 97c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 98c8281c7dSSatish Balay PetscTimeAdd() is intended only for timing of application codes. 99af4f1f30SBarry Smith The options database command -log_summary activate 1000598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 101c8281c7dSSatish Balay 102c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeSubtract() 103c8281c7dSSatish Balay 104c8281c7dSSatish Balay .keywords: Petsc, time, add 105c8281c7dSSatish Balay */ 106c8281c7dSSatish Balay 107c8281c7dSSatish Balay /* ------------------------------------------------------------------ 108c8281c7dSSatish Balay Some machines have very fast MPI_Wtime() 109c8281c7dSSatish Balay */ 110c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H)) 111c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 112c8281c7dSSatish Balay 113c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 114c8281c7dSSatish Balay 115c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 116c8281c7dSSatish Balay 117c8281c7dSSatish Balay /* ------------------------------------------------------------------ 118*bea725cfSBarry Smith IBM Power and PowerPC machines have a fast clock read_real_time() 119c8281c7dSSatish Balay */ 120c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 121*bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void); 122*bea725cfSBarry Smith #define PetscTime(v) (v)=PetscReadRealTime(); 123c8281c7dSSatish Balay 124*bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscReadRealTime(); 125c8281c7dSSatish Balay 126*bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscReadRealTime(); 127c8281c7dSSatish Balay 128c8281c7dSSatish Balay /* ------------------------------------------------------------------ 129*bea725cfSBarry Smith Microsoft Windows has its own time routines 130c8281c7dSSatish Balay */ 131*bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME) 132c8281c7dSSatish Balay #include <time.h> 1330f1eeb8eSSatish Balay EXTERN_C_BEGIN 134*bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void); 1350f1eeb8eSSatish Balay EXTERN_C_END 136*bea725cfSBarry Smith #define PetscTime(v) (v)=PetscMicrosoftTime(); 137c8281c7dSSatish Balay 138*bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscMicrosoftTime(); 139c8281c7dSSatish Balay 140*bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscMicrosoftTime(); 141c8281c7dSSatish Balay 142c8281c7dSSatish Balay /* ------------------------------------------------------------------ 143c8281c7dSSatish Balay The usual Unix time routines. 144c8281c7dSSatish Balay */ 145c8281c7dSSatish Balay #else 1462798158cSJed Brown #define PetscTime(v) do { \ 1472798158cSJed Brown static struct timeval _tp; \ 148c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1492798158cSJed Brown (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1502798158cSJed Brown } while (0) 151c8281c7dSSatish Balay 1522798158cSJed Brown #define PetscTimeSubtract(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 PetscTimeAdd(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 #endif 164c8281c7dSSatish Balay 165c8281c7dSSatish Balay #endif 166c8281c7dSSatish Balay 167c8281c7dSSatish Balay 168c8281c7dSSatish Balay 169c8281c7dSSatish Balay 170c8281c7dSSatish Balay 171