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 6*a663daf8SBarry Smith #if !defined(__PETSCTIME_H) 7*a663daf8SBarry 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 22c8281c7dSSatish Balay /* 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 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: 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 68c8281c7dSSatish Balay 69c8281c7dSSatish Balay Notes: 70c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 71c8281c7dSSatish Balay PetscTimeSubtract() is intended only for timing of application codes. 72c8281c7dSSatish Balay The options database commands -log, -log_summary, and -log_all activate 730598bfebSBarry Smith PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details. 74c8281c7dSSatish Balay 75c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeAdd() 76c8281c7dSSatish Balay 77c8281c7dSSatish Balay .keywords: Petsc, time, subtract 78c8281c7dSSatish Balay */ 79c8281c7dSSatish Balay 80c8281c7dSSatish Balay /* 81c8281c7dSSatish Balay PetscTimeAdd - Adds the current time of day (in seconds) to the value v. 82c8281c7dSSatish Balay 83eca87e8dSBarry Smith Synopsis: 84f2ba6396SBarry Smith #include "petsctime.h" 85eca87e8dSBarry Smith PetscTimeAdd(PetscLogDouble v) 86eca87e8dSBarry Smith 87eca87e8dSBarry Smith Not Collective 88eca87e8dSBarry Smith 89c8281c7dSSatish Balay Input Parameter: 90c8281c7dSSatish Balay . v - time counter 91c8281c7dSSatish Balay 92c8281c7dSSatish Balay Output Parameter: 93c8281c7dSSatish Balay . v - time counter (v = v + current time) 94c8281c7dSSatish Balay 95c8281c7dSSatish Balay Notes: 96c8281c7dSSatish Balay Since the PETSc libraries incorporate timing of phases and operations, 97c8281c7dSSatish Balay PetscTimeAdd() is intended only for timing of application codes. 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 101c8281c7dSSatish Balay .seealso: PetscTime(), PetscTimeSubtract() 102c8281c7dSSatish Balay 103c8281c7dSSatish Balay .keywords: Petsc, time, add 104c8281c7dSSatish Balay */ 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)) 110c8281c7dSSatish Balay #define PetscTime(v) (v)=MPI_Wtime(); 111c8281c7dSSatish Balay 112c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime(); 113c8281c7dSSatish Balay 114c8281c7dSSatish Balay #define PetscTimeAdd(v) (v)+=MPI_Wtime(); 115c8281c7dSSatish Balay 116c8281c7dSSatish Balay /* ------------------------------------------------------------------ 117bea725cfSBarry Smith IBM Power and PowerPC machines have a fast clock read_real_time() 118c8281c7dSSatish Balay */ 119c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME) 120bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void); 121bea725cfSBarry Smith #define PetscTime(v) (v)=PetscReadRealTime(); 122c8281c7dSSatish Balay 123bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscReadRealTime(); 124c8281c7dSSatish Balay 125bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscReadRealTime(); 126c8281c7dSSatish Balay 127c8281c7dSSatish Balay /* ------------------------------------------------------------------ 128bea725cfSBarry Smith Microsoft Windows has its own time routines 129c8281c7dSSatish Balay */ 130bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME) 131c8281c7dSSatish Balay #include <time.h> 1320f1eeb8eSSatish Balay EXTERN_C_BEGIN 133bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void); 1340f1eeb8eSSatish Balay EXTERN_C_END 135bea725cfSBarry Smith #define PetscTime(v) (v)=PetscMicrosoftTime(); 136c8281c7dSSatish Balay 137bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscMicrosoftTime(); 138c8281c7dSSatish Balay 139bea725cfSBarry Smith #define PetscTimeAdd(v) (v)+=PetscMicrosoftTime(); 140c8281c7dSSatish Balay 141c8281c7dSSatish Balay /* ------------------------------------------------------------------ 142c8281c7dSSatish Balay The usual Unix time routines. 143c8281c7dSSatish Balay */ 144c8281c7dSSatish Balay #else 1452798158cSJed Brown #define PetscTime(v) do { \ 1462798158cSJed Brown static struct timeval _tp; \ 147c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1482798158cSJed Brown (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1492798158cSJed Brown } while (0) 150c8281c7dSSatish Balay 1512798158cSJed Brown #define PetscTimeSubtract(v) do { \ 1522798158cSJed Brown static struct timeval _tp; \ 153c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1542798158cSJed Brown (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1552798158cSJed Brown } while (0) 156c8281c7dSSatish Balay 1572798158cSJed Brown #define PetscTimeAdd(v) do { \ 1582798158cSJed Brown static struct timeval _tp; \ 159c8281c7dSSatish Balay gettimeofday(&_tp,(struct timezone *)0); \ 1602798158cSJed Brown (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); \ 1612798158cSJed Brown } while (0) 162c8281c7dSSatish Balay #endif 163c8281c7dSSatish Balay 164c8281c7dSSatish Balay #endif 165c8281c7dSSatish Balay 166c8281c7dSSatish Balay 167c8281c7dSSatish Balay 168c8281c7dSSatish Balay 169c8281c7dSSatish Balay 170