xref: /petsc/include/petsctime.h (revision 8cc058d9cd56c1ccb3be12a47760ddfc446aaffc)
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