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> 98563dfccSBarry Smith 108563dfccSBarry 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: 19*aaa7dc30SBarry Smith #include <petsctime.h> 208563dfccSBarry 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; 308563dfccSBarry 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: 52*aaa7dc30SBarry Smith #include <petsctime.h> 538563dfccSBarry 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: 82*aaa7dc30SBarry Smith #include <petsctime.h> 838563dfccSBarry 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)) 1108563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 1118563dfccSBarry Smith { 1128563dfccSBarry Smith *v = MPI_Wtime(); 1138563dfccSBarry Smith return 0; 1148563dfccSBarry Smith } 115c8281c7dSSatish Balay 1168563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 1178563dfccSBarry Smith { 1188563dfccSBarry Smith *v -= MPI_Wtime(); 1198563dfccSBarry Smith return 0; 1208563dfccSBarry Smith } 121c8281c7dSSatish Balay 1228563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 1238563dfccSBarry Smith { 1248563dfccSBarry Smith *v += MPI_Wtime(); 1258563dfccSBarry Smith return 0; 1268563dfccSBarry 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 1348563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 1358563dfccSBarry Smith { 1368563dfccSBarry Smith *v = PetscReadRealTime(); 1378563dfccSBarry Smith return 0; 1388563dfccSBarry Smith } 139c8281c7dSSatish Balay 1408563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 1418563dfccSBarry Smith { 1428563dfccSBarry Smith *v -= PetscReadRealTime(); 1438563dfccSBarry Smith return 0; 1448563dfccSBarry Smith } 1458563dfccSBarry Smith 1468563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 1478563dfccSBarry Smith { 1488563dfccSBarry Smith *v += PetscReadRealTime(); 1498563dfccSBarry Smith return 0; 1508563dfccSBarry 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 1598563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 1608563dfccSBarry Smith { 1618563dfccSBarry Smith *v = PetscMicrosoftTime(); 1628563dfccSBarry Smith return 0; 1638563dfccSBarry Smith } 164c8281c7dSSatish Balay 1658563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 1668563dfccSBarry Smith { 1678563dfccSBarry Smith *v -= PetscMicrosoftTime(); 1688563dfccSBarry Smith return 0; 1698563dfccSBarry Smith } 1708563dfccSBarry Smith 1718563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 1728563dfccSBarry Smith { 1738563dfccSBarry Smith *v += PetscMicrosoftTime(); 1748563dfccSBarry Smith return 0; 1758563dfccSBarry Smith } 176c8281c7dSSatish Balay 177c8281c7dSSatish Balay /* ------------------------------------------------------------------ 178c8281c7dSSatish Balay The usual Unix time routines. 179c8281c7dSSatish Balay */ 180c8281c7dSSatish Balay #else 181c8281c7dSSatish Balay 1828563dfccSBarry Smith #if defined(PETSC_HAVE_SYS_TIME_H) 1838563dfccSBarry Smith #include <sys/time.h> 1848563dfccSBarry Smith #endif 185c8281c7dSSatish Balay 1868563dfccSBarry Smith #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO) 1878563dfccSBarry Smith PETSC_EXTERN int gettimeofday(struct timeval *,struct timezone *); 1888563dfccSBarry Smith #endif 1898563dfccSBarry Smith 1908563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v) 1918563dfccSBarry Smith { 1928563dfccSBarry Smith static struct timeval _tp; 1938563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 1948563dfccSBarry Smith *v = ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 1958563dfccSBarry Smith return 0; 1968563dfccSBarry Smith } 1978563dfccSBarry Smith 1988563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v) 1998563dfccSBarry Smith { 2008563dfccSBarry Smith static struct timeval _tp; 2018563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 2028563dfccSBarry Smith *v -= ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 2038563dfccSBarry Smith return 0; 2048563dfccSBarry Smith } 2058563dfccSBarry Smith 2068563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 2078563dfccSBarry Smith { 2088563dfccSBarry Smith static struct timeval _tp; 2098563dfccSBarry Smith gettimeofday(&_tp,(struct timezone *)0); 2108563dfccSBarry Smith *v += ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec); 2118563dfccSBarry Smith return 0; 2128563dfccSBarry Smith } 2138563dfccSBarry Smith 214c8281c7dSSatish Balay #endif 215c8281c7dSSatish Balay 216c8281c7dSSatish Balay #endif 217c8281c7dSSatish Balay 218c8281c7dSSatish Balay 219c8281c7dSSatish Balay 220