xref: /petsc/include/petsctime.h (revision c8281c7d684fe78ae84397e27b632e25b54c6e86)
1*c8281c7dSSatish Balay /*
2*c8281c7dSSatish Balay        Low cost access to system time. This, in general, should not
3*c8281c7dSSatish Balay      be included in user programs.
4*c8281c7dSSatish Balay */
5*c8281c7dSSatish Balay 
6*c8281c7dSSatish Balay #if !defined(__PTIME_H)
7*c8281c7dSSatish Balay #define __PTIME_H
8*c8281c7dSSatish Balay 
9*c8281c7dSSatish Balay #include "petsc.h"
10*c8281c7dSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
11*c8281c7dSSatish Balay #include <sys/types.h>
12*c8281c7dSSatish Balay #include <sys/time.h>
13*c8281c7dSSatish Balay #endif
14*c8281c7dSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
15*c8281c7dSSatish Balay EXTERN_C_BEGIN
16*c8281c7dSSatish Balay EXTERN int gettimeofday(struct timeval *,struct timezone *);
17*c8281c7dSSatish Balay EXTERN_C_END
18*c8281c7dSSatish Balay #endif
19*c8281c7dSSatish Balay 
20*c8281c7dSSatish Balay /*
21*c8281c7dSSatish Balay    PetscTime - Returns the current time of day in seconds.
22*c8281c7dSSatish Balay 
23*c8281c7dSSatish Balay    Output Parameter:
24*c8281c7dSSatish Balay .  v - time counter
25*c8281c7dSSatish Balay 
26*c8281c7dSSatish Balay    Synopsis:
27*c8281c7dSSatish Balay    PetscTime(PetscLogDouble v)
28*c8281c7dSSatish Balay 
29*c8281c7dSSatish Balay    Usage:
30*c8281c7dSSatish Balay      PetscLogDouble v;
31*c8281c7dSSatish Balay      PetscTime(v);
32*c8281c7dSSatish Balay      .... perform some calculation ...
33*c8281c7dSSatish Balay      printf("Time for operation %g\n",v);
34*c8281c7dSSatish Balay 
35*c8281c7dSSatish Balay    Notes:
36*c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
37*c8281c7dSSatish Balay    PetscTime() is intended only for timing of application codes.
38*c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
39*c8281c7dSSatish Balay    PETSc library timing.  See the users manual for further details.
40*c8281c7dSSatish Balay 
41*c8281c7dSSatish Balay .seealso:  PetscTimeSubtract(), PetscTimeAdd()
42*c8281c7dSSatish Balay 
43*c8281c7dSSatish Balay .keywords:  Petsc, time
44*c8281c7dSSatish Balay */
45*c8281c7dSSatish Balay 
46*c8281c7dSSatish Balay /*
47*c8281c7dSSatish Balay    PetscTimeSubtract - Subtracts the current time of day (in seconds) from
48*c8281c7dSSatish Balay    the value v.
49*c8281c7dSSatish Balay 
50*c8281c7dSSatish Balay    Input Parameter:
51*c8281c7dSSatish Balay .  v - time counter
52*c8281c7dSSatish Balay 
53*c8281c7dSSatish Balay    Output Parameter:
54*c8281c7dSSatish Balay .  v - time counter (v = v - current time)
55*c8281c7dSSatish Balay 
56*c8281c7dSSatish Balay    Synopsis:
57*c8281c7dSSatish Balay    PetscTimeSubtract(PetscLogDouble v)
58*c8281c7dSSatish Balay 
59*c8281c7dSSatish Balay    Notes:
60*c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
61*c8281c7dSSatish Balay    PetscTimeSubtract() is intended only for timing of application codes.
62*c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
63*c8281c7dSSatish Balay    PETSc library timing.  See the users manual for further details.
64*c8281c7dSSatish Balay 
65*c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeAdd()
66*c8281c7dSSatish Balay 
67*c8281c7dSSatish Balay .keywords:  Petsc, time, subtract
68*c8281c7dSSatish Balay */
69*c8281c7dSSatish Balay 
70*c8281c7dSSatish Balay /*
71*c8281c7dSSatish Balay    PetscTimeAdd - Adds the current time of day (in seconds) to the value v.
72*c8281c7dSSatish Balay 
73*c8281c7dSSatish Balay    Input Parameter:
74*c8281c7dSSatish Balay .  v - time counter
75*c8281c7dSSatish Balay 
76*c8281c7dSSatish Balay    Output Parameter:
77*c8281c7dSSatish Balay .  v - time counter (v = v + current time)
78*c8281c7dSSatish Balay 
79*c8281c7dSSatish Balay    Synopsis:
80*c8281c7dSSatish Balay    PetscTimeAdd(PetscLogDouble v)
81*c8281c7dSSatish Balay 
82*c8281c7dSSatish Balay    Notes:
83*c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
84*c8281c7dSSatish Balay    PetscTimeAdd() is intended only for timing of application codes.
85*c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
86*c8281c7dSSatish Balay    PETSc library timing.  See the users manual for further details.
87*c8281c7dSSatish Balay 
88*c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeSubtract()
89*c8281c7dSSatish Balay 
90*c8281c7dSSatish Balay .keywords:  Petsc, time, add
91*c8281c7dSSatish Balay */
92*c8281c7dSSatish Balay 
93*c8281c7dSSatish Balay /* ------------------------------------------------------------------
94*c8281c7dSSatish Balay     Some machines have very fast MPI_Wtime()
95*c8281c7dSSatish Balay */
96*c8281c7dSSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(_petsc_mpi_uni))
97*c8281c7dSSatish Balay #define PetscTime(v)         (v)=MPI_Wtime();
98*c8281c7dSSatish Balay 
99*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime();
100*c8281c7dSSatish Balay 
101*c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=MPI_Wtime();
102*c8281c7dSSatish Balay 
103*c8281c7dSSatish Balay /* ------------------------------------------------------------------
104*c8281c7dSSatish Balay    Power1,2,3,PC machines have a fast clock read_real_time()
105*c8281c7dSSatish Balay */
106*c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME)
107*c8281c7dSSatish Balay EXTERN PetscLogDouble rs6000_time(void);
108*c8281c7dSSatish Balay #define PetscTime(v)         (v)=rs6000_time();
109*c8281c7dSSatish Balay 
110*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=rs6000_time();
111*c8281c7dSSatish Balay 
112*c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=rs6000_time();
113*c8281c7dSSatish Balay 
114*c8281c7dSSatish Balay /* ------------------------------------------------------------------
115*c8281c7dSSatish Balay     Dec Alpha has a very fast system clock accessible through getclock()
116*c8281c7dSSatish Balay     getclock() doesn't seem to have a prototype for C++
117*c8281c7dSSatish Balay */
118*c8281c7dSSatish Balay #elif defined(PETSC_USE_GETCLOCK)
119*c8281c7dSSatish Balay EXTERN_C_BEGIN
120*c8281c7dSSatish Balay EXTERN int getclock(int clock_type,struct timespec *tp);
121*c8281c7dSSatish Balay EXTERN_C_END
122*c8281c7dSSatish Balay 
123*c8281c7dSSatish Balay 
124*c8281c7dSSatish Balay #define PetscTime(v)         {static struct  timespec _tp; \
125*c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
126*c8281c7dSSatish Balay                              (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
127*c8281c7dSSatish Balay 
128*c8281c7dSSatish Balay #define PetscTimeSubtract(v) {static struct timespec  _tp; \
129*c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
130*c8281c7dSSatish Balay                              (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
131*c8281c7dSSatish Balay 
132*c8281c7dSSatish Balay #define PetscTimeAdd(v)      {static struct timespec  _tp; \
133*c8281c7dSSatish Balay                              getclock(TIMEOFDAY,&_tp); \
134*c8281c7dSSatish Balay                              (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-9)*(_tp.tv_nsec);}
135*c8281c7dSSatish Balay 
136*c8281c7dSSatish Balay /* ------------------------------------------------------------------
137*c8281c7dSSatish Balay    ASCI RED machine has a fast clock accessiable through dclock()
138*c8281c7dSSatish Balay */
139*c8281c7dSSatish Balay #elif defined (PETSC_USE_DCLOCK)
140*c8281c7dSSatish Balay EXTERN_C_BEGIN
141*c8281c7dSSatish Balay EXTERN PetscLogDouble dclock();
142*c8281c7dSSatish Balay EXTERN_C_END
143*c8281c7dSSatish Balay 
144*c8281c7dSSatish Balay #define PetscTime(v)         (v)=dclock();
145*c8281c7dSSatish Balay 
146*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=dclock();
147*c8281c7dSSatish Balay 
148*c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=dclock();
149*c8281c7dSSatish Balay 
150*c8281c7dSSatish Balay 
151*c8281c7dSSatish Balay /* ------------------------------------------------------------------
152*c8281c7dSSatish Balay    Windows uses a special time code
153*c8281c7dSSatish Balay */
154*c8281c7dSSatish Balay #elif defined (PETSC_USE_NT_TIME)
155*c8281c7dSSatish Balay #include <time.h>
156*c8281c7dSSatish Balay EXTERN PetscLogDouble nt_time(void);
157*c8281c7dSSatish Balay #define PetscTime(v)         (v)=nt_time();
158*c8281c7dSSatish Balay 
159*c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=nt_time();
160*c8281c7dSSatish Balay 
161*c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=nt_time();
162*c8281c7dSSatish Balay 
163*c8281c7dSSatish Balay /* ------------------------------------------------------------------
164*c8281c7dSSatish Balay     The usual Unix time routines.
165*c8281c7dSSatish Balay */
166*c8281c7dSSatish Balay #else
167*c8281c7dSSatish Balay #define PetscTime(v)         {static struct timeval _tp; \
168*c8281c7dSSatish Balay                              gettimeofday(&_tp,(struct timezone *)0);\
169*c8281c7dSSatish Balay                              (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);}
170*c8281c7dSSatish Balay 
171*c8281c7dSSatish Balay #define PetscTimeSubtract(v) {static struct timeval _tp; \
172*c8281c7dSSatish Balay                              gettimeofday(&_tp,(struct timezone *)0);\
173*c8281c7dSSatish Balay                              (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);}
174*c8281c7dSSatish Balay 
175*c8281c7dSSatish Balay #define PetscTimeAdd(v)      {static struct timeval _tp; \
176*c8281c7dSSatish Balay                              gettimeofday(&_tp,(struct timezone *)0);\
177*c8281c7dSSatish Balay                              (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);}
178*c8281c7dSSatish Balay #endif
179*c8281c7dSSatish Balay 
180*c8281c7dSSatish Balay #endif
181*c8281c7dSSatish Balay 
182*c8281c7dSSatish Balay 
183*c8281c7dSSatish Balay 
184*c8281c7dSSatish Balay 
185*c8281c7dSSatish Balay 
186