xref: /petsc/include/petsctime.h (revision 014dd563d73e9fc78d056590fa6cf997782bf92d)
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 
9d382aafbSBarry 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 */
21*014dd563SJed 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:
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:
57eca87e8dSBarry Smith    PetscTimeSubtract(PetscLogDouble v)
58eca87e8dSBarry Smith 
59eca87e8dSBarry Smith    Not Collective
60eca87e8dSBarry Smith 
61c8281c7dSSatish Balay    Input Parameter:
62c8281c7dSSatish Balay .  v - time counter
63c8281c7dSSatish Balay 
64c8281c7dSSatish Balay    Output Parameter:
65c8281c7dSSatish Balay .  v - time counter (v = v - current time)
66c8281c7dSSatish Balay 
67c8281c7dSSatish Balay 
68c8281c7dSSatish Balay    Notes:
69c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
70c8281c7dSSatish Balay    PetscTimeSubtract() is intended only for timing of application codes.
71c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
720598bfebSBarry Smith    PETSc library timing.  See the <A href="../../docs/manual.pdf">Users Manual</A> for more details.
73c8281c7dSSatish Balay 
74c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeAdd()
75c8281c7dSSatish Balay 
76c8281c7dSSatish Balay .keywords:  Petsc, time, subtract
77c8281c7dSSatish Balay */
78c8281c7dSSatish Balay 
79c8281c7dSSatish Balay /*
80c8281c7dSSatish Balay    PetscTimeAdd - Adds the current time of day (in seconds) to the value v.
81c8281c7dSSatish Balay 
82eca87e8dSBarry Smith    Synopsis:
83eca87e8dSBarry 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 
93c8281c7dSSatish Balay    Notes:
94c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
95c8281c7dSSatish Balay    PetscTimeAdd() is intended only for timing of application codes.
96c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
970598bfebSBarry Smith    PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details.
98c8281c7dSSatish Balay 
99c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeSubtract()
100c8281c7dSSatish Balay 
101c8281c7dSSatish Balay .keywords:  Petsc, time, add
102c8281c7dSSatish Balay */
103c8281c7dSSatish Balay 
104c8281c7dSSatish Balay /* ------------------------------------------------------------------
105c8281c7dSSatish Balay     Some machines have very fast MPI_Wtime()
106c8281c7dSSatish Balay */
107c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H))
108c8281c7dSSatish Balay #define PetscTime(v)         (v)=MPI_Wtime();
109c8281c7dSSatish Balay 
110c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime();
111c8281c7dSSatish Balay 
112c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=MPI_Wtime();
113c8281c7dSSatish Balay 
114c8281c7dSSatish Balay /* ------------------------------------------------------------------
115c8281c7dSSatish Balay    Power1,2,3,PC machines have a fast clock read_real_time()
116c8281c7dSSatish Balay */
117c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME)
118*014dd563SJed Brown PETSC_EXTERN PetscLogDouble rs6000_time(void);
119c8281c7dSSatish Balay #define PetscTime(v)         (v)=rs6000_time();
120c8281c7dSSatish Balay 
121c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=rs6000_time();
122c8281c7dSSatish Balay 
123c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=rs6000_time();
124c8281c7dSSatish Balay 
125c8281c7dSSatish Balay /* ------------------------------------------------------------------
126c8281c7dSSatish Balay     Dec Alpha has a very fast system clock accessible through getclock()
127c8281c7dSSatish Balay     getclock() doesn't seem to have a prototype for C++
128c8281c7dSSatish Balay */
129c8281c7dSSatish Balay #elif defined(PETSC_USE_GETCLOCK)
130c8281c7dSSatish Balay EXTERN_C_BEGIN
13109573ac7SBarry Smith extern int getclock(int clock_type,struct timespec *tp);
132c8281c7dSSatish Balay EXTERN_C_END
133c8281c7dSSatish Balay 
134c8281c7dSSatish Balay 
135c8281c7dSSatish Balay #define PetscTime(v)         {static struct  timespec _tp; \
136c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
137c8281c7dSSatish Balay                              (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
138c8281c7dSSatish Balay 
139c8281c7dSSatish Balay #define PetscTimeSubtract(v) {static struct timespec  _tp; \
140c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
141c8281c7dSSatish Balay                              (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
142c8281c7dSSatish Balay 
143c8281c7dSSatish Balay #define PetscTimeAdd(v)      {static struct timespec  _tp; \
144c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
145c8281c7dSSatish Balay                              (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
146c8281c7dSSatish Balay 
147c8281c7dSSatish Balay /* ------------------------------------------------------------------
148c8281c7dSSatish Balay    ASCI RED machine has a fast clock accessiable through dclock()
149c8281c7dSSatish Balay */
150c8281c7dSSatish Balay #elif defined (PETSC_USE_DCLOCK)
151c8281c7dSSatish Balay EXTERN_C_BEGIN
152*014dd563SJed Brown PETSC_EXTERN PetscLogDouble dclock();
153c8281c7dSSatish Balay EXTERN_C_END
154c8281c7dSSatish Balay 
155c8281c7dSSatish Balay #define PetscTime(v)         (v)=dclock();
156c8281c7dSSatish Balay 
157c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=dclock();
158c8281c7dSSatish Balay 
159c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=dclock();
160c8281c7dSSatish Balay 
161c8281c7dSSatish Balay 
162c8281c7dSSatish Balay /* ------------------------------------------------------------------
163c8281c7dSSatish Balay    Windows uses a special time code
164c8281c7dSSatish Balay */
165c8281c7dSSatish Balay #elif defined (PETSC_USE_NT_TIME)
166c8281c7dSSatish Balay #include <time.h>
1670f1eeb8eSSatish Balay EXTERN_C_BEGIN
168*014dd563SJed Brown PETSC_EXTERN PetscLogDouble nt_time(void);
1690f1eeb8eSSatish Balay EXTERN_C_END
170c8281c7dSSatish Balay #define PetscTime(v)         (v)=nt_time();
171c8281c7dSSatish Balay 
172c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=nt_time();
173c8281c7dSSatish Balay 
174c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=nt_time();
175c8281c7dSSatish Balay 
176c8281c7dSSatish Balay /* ------------------------------------------------------------------
177c8281c7dSSatish Balay     The usual Unix time routines.
178c8281c7dSSatish Balay */
179c8281c7dSSatish Balay #else
1802798158cSJed Brown #define PetscTime(v)         do {                                       \
1812798158cSJed Brown     static struct timeval _tp;                                          \
182c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1832798158cSJed Brown     (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);            \
1842798158cSJed Brown   } while (0)
185c8281c7dSSatish Balay 
1862798158cSJed Brown #define PetscTimeSubtract(v) do {                                       \
1872798158cSJed Brown     static struct timeval _tp;                                          \
188c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1892798158cSJed Brown     (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);           \
1902798158cSJed Brown   } while (0)
191c8281c7dSSatish Balay 
1922798158cSJed Brown #define PetscTimeAdd(v) do {                                            \
1932798158cSJed Brown     static struct timeval _tp;                                          \
194c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1952798158cSJed Brown     (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);           \
1962798158cSJed Brown   } while (0)
197c8281c7dSSatish Balay #endif
198c8281c7dSSatish Balay 
199c8281c7dSSatish Balay #endif
200c8281c7dSSatish Balay 
201c8281c7dSSatish Balay 
202c8281c7dSSatish Balay 
203c8281c7dSSatish Balay 
204c8281c7dSSatish Balay 
205