xref: /petsc/include/petsctime.h (revision 8563dfcc547dae59d5e1dc6b8e602db41cb72b14)
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>
9*8563dfccSBarry Smith 
10*8563dfccSBarry 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:
19f2ba6396SBarry Smith     #include "petsctime.h"
20*8563dfccSBarry 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;
30*8563dfccSBarry 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:
52f2ba6396SBarry Smith     #include "petsctime.h"
53*8563dfccSBarry 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:
82f2ba6396SBarry Smith     #include "petsctime.h"
83*8563dfccSBarry 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))
110*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v)
111*8563dfccSBarry Smith {
112*8563dfccSBarry Smith   *v = MPI_Wtime();
113*8563dfccSBarry Smith   return 0;
114*8563dfccSBarry Smith }
115c8281c7dSSatish Balay 
116*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
117*8563dfccSBarry Smith {
118*8563dfccSBarry Smith   *v -= MPI_Wtime();
119*8563dfccSBarry Smith   return 0;
120*8563dfccSBarry Smith }
121c8281c7dSSatish Balay 
122*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
123*8563dfccSBarry Smith {
124*8563dfccSBarry Smith   *v += MPI_Wtime();
125*8563dfccSBarry Smith   return 0;
126*8563dfccSBarry 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 
134*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v)
135*8563dfccSBarry Smith {
136*8563dfccSBarry Smith   *v = PetscReadRealTime();
137*8563dfccSBarry Smith   return 0;
138*8563dfccSBarry Smith }
139c8281c7dSSatish Balay 
140*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
141*8563dfccSBarry Smith {
142*8563dfccSBarry Smith   *v -= PetscReadRealTime();
143*8563dfccSBarry Smith   return 0;
144*8563dfccSBarry Smith }
145*8563dfccSBarry Smith 
146*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
147*8563dfccSBarry Smith {
148*8563dfccSBarry Smith   *v += PetscReadRealTime();
149*8563dfccSBarry Smith   return 0;
150*8563dfccSBarry 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 
159*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v)
160*8563dfccSBarry Smith {
161*8563dfccSBarry Smith   *v = PetscMicrosoftTime();
162*8563dfccSBarry Smith   return 0;
163*8563dfccSBarry Smith }
164c8281c7dSSatish Balay 
165*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
166*8563dfccSBarry Smith {
167*8563dfccSBarry Smith   *v -= PetscMicrosoftTime();
168*8563dfccSBarry Smith   return 0;
169*8563dfccSBarry Smith }
170*8563dfccSBarry Smith 
171*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
172*8563dfccSBarry Smith {
173*8563dfccSBarry Smith   *v += PetscMicrosoftTime();
174*8563dfccSBarry Smith   return 0;
175*8563dfccSBarry Smith }
176c8281c7dSSatish Balay 
177c8281c7dSSatish Balay /* ------------------------------------------------------------------
178c8281c7dSSatish Balay     The usual Unix time routines.
179c8281c7dSSatish Balay */
180c8281c7dSSatish Balay #else
181c8281c7dSSatish Balay 
182*8563dfccSBarry Smith #if defined(PETSC_HAVE_SYS_TIME_H)
183*8563dfccSBarry Smith #include <sys/time.h>
184*8563dfccSBarry Smith #endif
185c8281c7dSSatish Balay 
186*8563dfccSBarry Smith #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
187*8563dfccSBarry Smith PETSC_EXTERN int gettimeofday(struct timeval *,struct timezone *);
188*8563dfccSBarry Smith #endif
189*8563dfccSBarry Smith 
190*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTime(PetscLogDouble *v)
191*8563dfccSBarry Smith {
192*8563dfccSBarry Smith   static struct timeval _tp;
193*8563dfccSBarry Smith   gettimeofday(&_tp,(struct timezone *)0);
194*8563dfccSBarry Smith   *v = ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);
195*8563dfccSBarry Smith   return 0;
196*8563dfccSBarry Smith }
197*8563dfccSBarry Smith 
198*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
199*8563dfccSBarry Smith {
200*8563dfccSBarry Smith   static struct timeval _tp;
201*8563dfccSBarry Smith   gettimeofday(&_tp,(struct timezone *)0);
202*8563dfccSBarry Smith   *v -= ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);
203*8563dfccSBarry Smith   return 0;
204*8563dfccSBarry Smith }
205*8563dfccSBarry Smith 
206*8563dfccSBarry Smith PETSC_STATIC_INLINE PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
207*8563dfccSBarry Smith {
208*8563dfccSBarry Smith   static struct timeval _tp;
209*8563dfccSBarry Smith   gettimeofday(&_tp,(struct timezone *)0);
210*8563dfccSBarry Smith   *v += ((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);
211*8563dfccSBarry Smith   return 0;
212*8563dfccSBarry Smith }
213*8563dfccSBarry Smith 
214c8281c7dSSatish Balay #endif
215c8281c7dSSatish Balay 
216c8281c7dSSatish Balay #endif
217c8281c7dSSatish Balay 
218c8281c7dSSatish Balay 
219c8281c7dSSatish Balay 
220