xref: /petsc/include/petsclog.h (revision 3a40ed3dce77c081171d005ae1a6ff4bb9d13b6f)
1*3a40ed3dSBarry Smith /* $Id: petsclog.h,v 1.114 1997/09/09 20:27:02 curfman Exp bsmith $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
47588ac45SBarry Smith     Defines profile/logging in PETSc.
597bb86f7SLois Curfman McInnes */
697bb86f7SLois Curfman McInnes 
797bb86f7SLois Curfman McInnes #if !defined(__PLOG_PACKAGE)
897bb86f7SLois Curfman McInnes #define __PLOG_PACKAGE
997bb86f7SLois Curfman McInnes #include "petsc.h"
1097bb86f7SLois Curfman McInnes 
1197bb86f7SLois Curfman McInnes /*
127588ac45SBarry Smith   Lists all PETSc events that are logged/profiled.
137588ac45SBarry Smith 
14a2ce50c7SBarry Smith   If you add an event here, make sure you add it to
15a2ce50c7SBarry Smith   petsc/bin/petscview.cfg,
16a2ce50c7SBarry Smith   petsc/bin/petscview,
17a2ce50c7SBarry Smith   petsc/src/plog/src/plog.c,
182ee1dbe0SBarry Smith   petsc/src/plog/src/plogmpe.c, and
19e10960a1SSatish Balay   petsc/include/FINCLUDE/petsclog.h!!!
2097bb86f7SLois Curfman McInnes */
2197bb86f7SLois Curfman McInnes #define MAT_Mult                                0
221ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult                      1
231ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin                       2
241ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd                         3
251ff317f7SLois Curfman McInnes #define MAT_GetReordering                       4
261ff317f7SLois Curfman McInnes #define MAT_MultTrans                           5
271ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
281ff317f7SLois Curfman McInnes #define MAT_MultTransAdd                        7
291ff317f7SLois Curfman McInnes #define MAT_LUFactor                            8
301ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor                      9
311ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic                    10
321ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic                   11
331ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic              12
341ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic    13
351ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric                     14
361ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric               15
371ff317f7SLois Curfman McInnes #define MAT_Relax                               16
381ff317f7SLois Curfman McInnes #define MAT_Copy                                17
391ff317f7SLois Curfman McInnes #define MAT_Convert                             18
401ff317f7SLois Curfman McInnes #define MAT_Scale                               19
411ff317f7SLois Curfman McInnes #define MAT_ZeroEntries                         20
421ff317f7SLois Curfman McInnes #define MAT_Solve                               21
431ff317f7SLois Curfman McInnes #define MAT_SolveAdd                            22
441ff317f7SLois Curfman McInnes #define MAT_SolveTrans                          23
451ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd                       24
461ff317f7SLois Curfman McInnes #define MAT_SetValues                           25
471ff317f7SLois Curfman McInnes #define MAT_ForwardSolve                        26
481ff317f7SLois Curfman McInnes #define MAT_BackwardSolve                       27
491ff317f7SLois Curfman McInnes #define MAT_Load                                28
501ff317f7SLois Curfman McInnes #define MAT_View                                29
511ff317f7SLois Curfman McInnes #define MAT_ILUFactor                           30
523e584e2eSBarry Smith #define MAT_GetColoring                         31
531ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices                      32
541ff317f7SLois Curfman McInnes #define MAT_GetValues                           33
551ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap                     34
56dd8bebb4SSatish Balay #define MAT_GetRow                              35
5797bb86f7SLois Curfman McInnes 
58005c665bSBarry Smith #define VEC_ScatterBarrier                      39
594dcbc457SBarry Smith #define VEC_Dot                                 40
604dcbc457SBarry Smith #define VEC_Norm                                41
614dcbc457SBarry Smith #define VEC_Max                                 42
624dcbc457SBarry Smith #define VEC_Min                                 43
634dcbc457SBarry Smith #define VEC_TDot                                44
644dcbc457SBarry Smith #define VEC_Scale                               45
654dcbc457SBarry Smith #define VEC_Copy                                46
664dcbc457SBarry Smith #define VEC_Set                                 47
674dcbc457SBarry Smith #define VEC_AXPY                                48
684dcbc457SBarry Smith #define VEC_AYPX                                49
694dcbc457SBarry Smith #define VEC_Swap                                50
704dcbc457SBarry Smith #define VEC_WAXPY                               51
714dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
724dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
734dcbc457SBarry Smith #define VEC_MTDot                               54
744dcbc457SBarry Smith #define VEC_MDot                                55
754dcbc457SBarry Smith #define VEC_MAXPY                               56
764dcbc457SBarry Smith #define VEC_PMult                               57
774dcbc457SBarry Smith #define VEC_SetValues                           58
784dcbc457SBarry Smith #define VEC_Load                                59
794dcbc457SBarry Smith #define VEC_View                                60
804dcbc457SBarry Smith #define VEC_ScatterBegin                        61
814dcbc457SBarry Smith #define VEC_ScatterEnd                          62
82bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
8397bb86f7SLois Curfman McInnes 
84005c665bSBarry Smith #define VEC_NormBarrier                         64
85005c665bSBarry Smith #define VEC_NormComm                            65
86005c665bSBarry Smith #define VEC_DotBarrier                          66
87005c665bSBarry Smith #define VEC_DotComm                             67
88005c665bSBarry Smith #define VEC_MDotBarrier                         68
89005c665bSBarry Smith #define VEC_MDotComm                            69
90005c665bSBarry Smith 
914dcbc457SBarry Smith #define SLES_Solve                              70
924dcbc457SBarry Smith #define SLES_SetUp                              71
9397bb86f7SLois Curfman McInnes 
944dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
9597bb86f7SLois Curfman McInnes 
961bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices                    74
974dcbc457SBarry Smith #define PC_SetUp                                75
9836058207SBarry Smith #define PC_SetUpOnBlocks                        76
9932284f49SSatish Balay #define PC_Apply                                77
100614700edSBarry Smith #define PC_ApplySymmetricLeft                   78
101614700edSBarry Smith #define PC_ApplySymmetricRight                  79
1024dcbc457SBarry Smith 
1034dcbc457SBarry Smith #define SNES_Solve                              80
1044dcbc457SBarry Smith #define SNES_LineSearch                         81
1054dcbc457SBarry Smith #define SNES_FunctionEval                       82
1064dcbc457SBarry Smith #define SNES_JacobianEval                       83
1074dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
1084dcbc457SBarry Smith #define SNES_GradientEval                       85
1094dcbc457SBarry Smith #define SNES_HessianEval                        86
1104dcbc457SBarry Smith 
111682d7d0cSBarry Smith #define TS_Step                                 90
112bf343e40SBarry Smith #define TS_PseudoComputeTimeStep                91
11372936c9dSBarry Smith 
11472936c9dSBarry Smith #define Petsc_Barrier                           100
11555206aebSLois Curfman McInnes 
1160513a670SBarry Smith #define EC_SetUp                                105
1170513a670SBarry Smith #define EC_Solve                                106
1180513a670SBarry Smith 
11955206aebSLois Curfman McInnes #define DFVec_RefineVector                      110
12055206aebSLois Curfman McInnes #define DFVec_AssembleFullVector                111
12155206aebSLois Curfman McInnes #define DFVec_GetComponentVectors               112
12255206aebSLois Curfman McInnes #define DFVec_DrawContours                      113
12355206aebSLois Curfman McInnes 
12441debaddSBarry Smith /*
125b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
12677c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
127b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
12841debaddSBarry Smith */
12935aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1304dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
13197bb86f7SLois Curfman McInnes 
13219b02663SBarry Smith /* Global flop counter */
13347794344SBarry Smith extern PLogDouble _TotalFlops;
13419b02663SBarry Smith 
135edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
13694a424c1SBarry Smith extern int PLogInfo(void*,char*,...);
137cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int);
138614700edSBarry Smith extern int PLogInfoActivateClass(int);
13943a90d84SBarry Smith extern int PLogPrintInfo;  /* if 1, indicates PLogInfo() is turned on */
140614700edSBarry Smith 
141*3a40ed3dSBarry Smith #if defined(USE_PETSC_LOG)  /* --- Logging is turned on --------------------------------*/
142614700edSBarry Smith 
143da63de55SLois Curfman McInnes /*
144da63de55SLois Curfman McInnes    Flop counting:  We count each arithmetic operation (e.g., addition, multiplication) separately.
145da63de55SLois Curfman McInnes 
146da63de55SLois Curfman McInnes    For the complex numbers version, note that
147da63de55SLois Curfman McInnes        1 complex addition = 2 flops
148da63de55SLois Curfman McInnes        1 complex multiplication = 6 flops,
149da63de55SLois Curfman McInnes    where we define 1 flop as that for a double precision scalar.  We roughly approximate
150da63de55SLois Curfman McInnes    flop counting for complex numbers by multiplying the total flops by 4; this corresponds
151da63de55SLois Curfman McInnes    to the assumption that we're counting mostly additions and multiplications -- and
152da63de55SLois Curfman McInnes    roughly the same number of each.  More accurate counting could be done by distinguishing
153da63de55SLois Curfman McInnes    among the various arithmetic operations.
154da63de55SLois Curfman McInnes  */
155da63de55SLois Curfman McInnes 
156*3a40ed3dSBarry Smith #if defined(USE_PETSC_COMPLEX)
157da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);}
158da63de55SLois Curfman McInnes #else
159a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
160da63de55SLois Curfman McInnes #endif
16177c4ece6SBarry Smith 
16277c4ece6SBarry Smith #if defined (HAVE_MPE)
16377c4ece6SBarry Smith #include "mpe.h"
164614700edSBarry Smith #define MPEBEGIN    1000
16577c4ece6SBarry Smith extern int PLogMPEBegin();
16677c4ece6SBarry Smith extern int PLogMPEDump(char *);
167614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
168614700edSBarry Smith extern int PLogEventMPEActivate(int);
169905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int);
170614700edSBarry Smith #else
171c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0
172c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0
17377c4ece6SBarry Smith #endif
17477c4ece6SBarry Smith 
175614700edSBarry Smith extern int PLogEventActivate(int);
176905e6a2fSBarry Smith extern int PLogEventDeactivate(int);
177614700edSBarry Smith 
1783e584e2eSBarry Smith extern int PLogEventActivateClass(int);
1793e584e2eSBarry Smith extern int PLogEventDeactivateClass(int);
180614700edSBarry Smith 
181614700edSBarry Smith extern int PLogEventFlags[];
182b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
183b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
184b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject);
185b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject);
18677c4ece6SBarry Smith 
18777c4ece6SBarry Smith #if defined(HAVE_MPE)
188005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
189005c665bSBarry Smith   { \
190005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[e]) {                           \
191005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
192005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
193005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,"");\
194005c665bSBarry Smith       MPI_Barrier(cm);                                             \
195005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
196005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
197005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
198005c665bSBarry Smith     }                                                                \
199005c665bSBarry Smith     PLogEventBegin(e+1,o1,o2,o3,o4);                                   \
200005c665bSBarry Smith     if (UseMPE && PLogEventMPEFlags[(e)+1])\
201005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
202005c665bSBarry Smith   }
203a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
20456cd22aeSBarry Smith   {  \
205005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
206005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
207005c665bSBarry Smith    if (UseMPE && PLogEventMPEFlags[(e)])\
208005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
20977c4ece6SBarry Smith   }
21077c4ece6SBarry Smith #else
211005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
212005c665bSBarry Smith   { \
213005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[(e)]) {                           \
214005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
215005c665bSBarry Smith       MPI_Barrier(cm);                                             \
216005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
217005c665bSBarry Smith     }                                                                \
218005c665bSBarry Smith     PLogEventBegin((e)+1,o1,o2,o3,o4);                                   \
219005c665bSBarry Smith   }
220a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
22156cd22aeSBarry Smith   {  \
222005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
223005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
22477c4ece6SBarry Smith   }
22577c4ece6SBarry Smith #endif
22677c4ece6SBarry Smith 
22777c4ece6SBarry Smith #if defined(HAVE_MPE)
228005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
229005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
230005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
231005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)+1])\
232005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\
233005c665bSBarry Smith   }
23477c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
235005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
236005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
237005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)])\
238005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
239a1b5d808SSatish Balay   }
24077c4ece6SBarry Smith #else
241005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
242005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
243005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
244005c665bSBarry Smith   }
24577c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
246005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
247005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
248a1b5d808SSatish Balay   }
24977c4ece6SBarry Smith #endif
25077c4ece6SBarry Smith 
25177c4ece6SBarry Smith 
252*3a40ed3dSBarry Smith #define PLogObjectParent(p,c)       if (c) {PetscValidHeader((PetscObject)(c)); \
253*3a40ed3dSBarry Smith                                      PetscValidHeader((PetscObject)(p));\
254*3a40ed3dSBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) (p);}
25577c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
25677c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
257b3bbe94bSBarry Smith #define PLogObjectCreate(h)         {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);}
258b3bbe94bSBarry Smith #define PLogObjectDestroy(h)        {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);}
25977c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
26077c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
26177c4ece6SBarry Smith extern int        PLogObjectState(PetscObject,char *,...);
26277c4ece6SBarry Smith extern int        PLogDestroy();
26377c4ece6SBarry Smith extern int        PLogStagePush(int);
26477c4ece6SBarry Smith extern int        PLogStagePop();
26577c4ece6SBarry Smith extern int        PLogStageRegister(int,char*);
2663044e3d5SSatish Balay extern int        PLogPrintSummary(MPI_Comm,char *);
267edde42fcSLois Curfman McInnes extern int        PLogBegin();
268bc1211c7SBarry Smith extern int        PLogTraceBegin(FILE *);
269edde42fcSLois Curfman McInnes extern int        PLogAllBegin();
270bc1211c7SBarry Smith extern int        PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
271bc1211c7SBarry Smith                           int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
272edde42fcSLois Curfman McInnes extern int        PLogDump(char*);
273edde42fcSLois Curfman McInnes extern int        PLogEventRegister(int*,char*,char*);
27447794344SBarry Smith extern PLogDouble PetscGetFlops();
27577c4ece6SBarry Smith 
27647794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct;
27747794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len;
27847794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
279ce85283eSBarry Smith /*
28084cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
281ce85283eSBarry Smith    uses macros to defined the MPI operations.
28215308354SBarry Smith 
28315308354SBarry Smith      It does not work correctly from HP-UX because it processes the
28415308354SBarry Smith    macros in a way that sometimes it double counts.
2857c1e34a4SSatish Balay 
2867c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
287ce85283eSBarry Smith */
288a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt)
28977a39924SBarry Smith /*
29077a39924SBarry Smith    Logging of MPI activities
29177a39924SBarry Smith */
29277a39924SBarry Smith 
29377a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
29477a39924SBarry Smith {                                                                                \
29577a39924SBarry Smith   if (type == MPIU_SCALAR) {                                                     \
29647794344SBarry Smith     buff += (PLogDouble) ((count)*sizeof(Scalar));                               \
29777a39924SBarry Smith   } else if (type == MPI_INT) {                                                  \
29847794344SBarry Smith     buff += (PLogDouble) ((count)*sizeof(int));                                  \
29977a39924SBarry Smith   } else {                                                                       \
30047794344SBarry Smith     int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \
30177a39924SBarry Smith   }                                                                              \
30277a39924SBarry Smith }
30377a39924SBarry Smith 
30477a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request)        \
30577a39924SBarry Smith {                                                                            \
30677a39924SBarry Smith   MPI_Irecv( buf, count,  datatype, source, tag, comm, request);             \
30777a39924SBarry Smith   irecv_ct++; TypeSize(irecv_len,count,datatype);                            \
30877a39924SBarry Smith }
30915308354SBarry Smith 
31077a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request)          \
31177a39924SBarry Smith {                                                                            \
31277a39924SBarry Smith   MPI_Isend( buf, count,  datatype, dest, tag, comm, request);               \
313e0937024SBarry Smith   isend_ct++;   TypeSize(isend_len,count,datatype);                          \
31477a39924SBarry Smith }
31515308354SBarry Smith 
3160d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests)                                    \
3170d4b0b6cSBarry Smith {                                                                                     \
3180d4b0b6cSBarry Smith   MPI_Startall( number, requests);                                                    \
31947794344SBarry Smith   irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \
3200d4b0b6cSBarry Smith }
3210d4b0b6cSBarry Smith 
3220d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests)                                    \
3230d4b0b6cSBarry Smith {                                                                                     \
3240d4b0b6cSBarry Smith   MPI_Startall( number, requests);                                                    \
32547794344SBarry Smith   isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \
3260d4b0b6cSBarry Smith }
3270d4b0b6cSBarry Smith 
3280d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests)                                     \
3290d4b0b6cSBarry Smith {                                                                             \
3300d4b0b6cSBarry Smith   MPI_Start( requests);                                                       \
33147794344SBarry Smith   isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar));               \
3320d4b0b6cSBarry Smith }
3330d4b0b6cSBarry Smith 
334ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status)           \
335ce85283eSBarry Smith {                                                                             \
336ce85283eSBarry Smith   MPI_Recv( buf, count,  datatype, source, tag, comm, status);                \
337ce85283eSBarry Smith   recv_ct++; TypeSize(recv_len,count,datatype);                               \
338ce85283eSBarry Smith }
33915308354SBarry Smith 
34077a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm)                     \
34177a39924SBarry Smith {                                                                             \
34277a39924SBarry Smith   MPI_Send( buf, count,  datatype, dest, tag, comm);                          \
343e0937024SBarry Smith   send_ct++;  TypeSize(send_len,count,datatype);                              \
34477a39924SBarry Smith }
34577a39924SBarry Smith 
34677a39924SBarry Smith #define MPI_Wait(request, status) \
34777a39924SBarry Smith (                                 \
348e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,   \
34977a39924SBarry Smith   MPI_Wait(request, status)       \
35077a39924SBarry Smith )
35177a39924SBarry Smith 
35277a39924SBarry Smith #define MPI_Waitany(a, b, c, d)     \
35377a39924SBarry Smith (                                   \
354e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++, \
35577a39924SBarry Smith   MPI_Waitany(a, b, c, d)           \
35677a39924SBarry Smith )
35777a39924SBarry Smith 
35877a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
35977a39924SBarry Smith (                                                                \
36047794344SBarry Smith   wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count),        \
36177a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses)       \
36277a39924SBarry Smith )
36377a39924SBarry Smith 
36477a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
365005c665bSBarry Smith     (allreduce_ct++,MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm))
3663914022bSBarry Smith 
3670d4b0b6cSBarry Smith #else
3680d4b0b6cSBarry Smith 
3690d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \
3700d4b0b6cSBarry Smith {                                                  \
3710d4b0b6cSBarry Smith   MPI_Startall( number, requests);                 \
3720d4b0b6cSBarry Smith }
3730d4b0b6cSBarry Smith 
3740d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \
3750d4b0b6cSBarry Smith {                                                  \
3760d4b0b6cSBarry Smith   MPI_Startall( number, requests);                 \
3770d4b0b6cSBarry Smith }
3780d4b0b6cSBarry Smith 
3790d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests) \
3800d4b0b6cSBarry Smith {                                         \
3810d4b0b6cSBarry Smith   MPI_Start( requests);                   \
3820d4b0b6cSBarry Smith }
3830d4b0b6cSBarry Smith 
38415308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */
385614700edSBarry Smith 
386df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
387614700edSBarry Smith 
388614700edSBarry Smith #define PLogFlops(n)
389614700edSBarry Smith 
390df8cf0b5SBarry Smith /*
391df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
392df8cf0b5SBarry Smith */
393614700edSBarry Smith #define MPEBEGIN                  1000
394df8cf0b5SBarry Smith #define PLogMPEBegin()
395df8cf0b5SBarry Smith #define PLogMPEDump(a)
396bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
397bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
398614700edSBarry Smith 
399bf343e40SBarry Smith #define PLogEventActivate(a)   0
400bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
401614700edSBarry Smith 
402bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
403bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
40477c4ece6SBarry Smith 
405b3bbe94bSBarry Smith #define _PLogPLB                        0
406b3bbe94bSBarry Smith #define _PLogPLE                        0
407b3bbe94bSBarry Smith #define _PLogPHC                        0
408b3bbe94bSBarry Smith #define _PLogPHD                        0
409a5558d3fSBarry Smith #define PetscGetFlops()               0.0
410d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
411d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
412005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
413005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
414d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
415d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
416d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
417d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
418d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
419d7a720efSLois Curfman McInnes #define PLogDestroy()
420bf343e40SBarry Smith #define PLogStagePush(a)
421d7a720efSLois Curfman McInnes #define PLogStagePop()
422d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
423d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
424d7a720efSLois Curfman McInnes #define PLogBegin()
425974088aaSSatish Balay #define PLogTraceBegin(file)            0
426bc1211c7SBarry Smith #define PLogSet(lb,le)
427d7a720efSLois Curfman McInnes #define PLogAllBegin()
428d7a720efSLois Curfman McInnes #define PLogDump(char)
429dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
430d7a720efSLois Curfman McInnes #define PLogMPEBegin()
431d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
4327f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
433ce6058e1SBarry Smith 
434*3a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */
435ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \
436ce6058e1SBarry Smith {                                                  \
437ce6058e1SBarry Smith   MPI_Startall( number, requests);                 \
438ce6058e1SBarry Smith }
439ce6058e1SBarry Smith 
440ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \
441ce6058e1SBarry Smith {                                                  \
442ce6058e1SBarry Smith   MPI_Startall( number, requests);                 \
443ce6058e1SBarry Smith }
444ce6058e1SBarry Smith 
445ce6058e1SBarry Smith #define MPI_Start_isend(count,  requests) \
446ce6058e1SBarry Smith {                                         \
447ce6058e1SBarry Smith   MPI_Start( requests);                   \
448ce6058e1SBarry Smith }
449*3a40ed3dSBarry Smith #endif   /* USE_PETSC_LOG */
4506daaf66cSBarry Smith 
4518b6d568bSLois Curfman McInnes /*MC
45219b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
45319b02663SBarry Smith 
45419b02663SBarry Smith    Input Parameter:
45519b02663SBarry Smith .  f - flop counter
45619b02663SBarry Smith 
45719b02663SBarry Smith    Synopsis:
458682ac3c9SWilliam Gropp    void PLogFlops(int f)
45919b02663SBarry Smith 
46019b02663SBarry Smith    Notes:
46119b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
46219b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
46319b02663SBarry Smith    application code.
46419b02663SBarry Smith 
46519b02663SBarry Smith    PETSc automatically logs library events if the code has been
466*3a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG (which is the default), and -log,
46719b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
46819b02663SBarry Smith    intended for logging user flops to supplement this PETSc
46919b02663SBarry Smith    information.
47019b02663SBarry Smith 
47119b02663SBarry Smith     Example of Usage:
47235aab85fSBarry Smith $     int USER_EVENT;
473b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
47419b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
47519b02663SBarry Smith $        [code segment to monitor]
47619b02663SBarry Smith $        PLogFlops(user_flops)
47719b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
47819b02663SBarry Smith 
47958cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops()
48019b02663SBarry Smith 
481edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
48219b02663SBarry Smith M*/
48319b02663SBarry Smith 
48497bb86f7SLois Curfman McInnes 
485d7a720efSLois Curfman McInnes /*MC
48619b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
48797bb86f7SLois Curfman McInnes 
48897bb86f7SLois Curfman McInnes    Input Parameters:
48935aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
49097bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
49197bb86f7SLois Curfman McInnes 
49297bb86f7SLois Curfman McInnes    Synopsis:
493682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
49497bb86f7SLois Curfman McInnes                   PetscObject o4)
49597bb86f7SLois Curfman McInnes 
49697bb86f7SLois Curfman McInnes    Notes:
49797bb86f7SLois Curfman McInnes    You should also register each integer event with the command
49897bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
499*3a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
50097bb86f7SLois Curfman McInnes 
50197bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
502*3a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
50397bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
50497bb86f7SLois Curfman McInnes    to supplement this PETSc information.
50597bb86f7SLois Curfman McInnes 
50697bb86f7SLois Curfman McInnes     Example of Usage:
50735aab85fSBarry Smith $     int USER_EVENT;
5080eb211faSLois Curfman McInnes $     int user_event_flops;
509b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
51035aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
51197bb86f7SLois Curfman McInnes $        [code segment to monitor]
5120eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
51335aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
51497bb86f7SLois Curfman McInnes 
51597bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
51697bb86f7SLois Curfman McInnes 
51797bb86f7SLois Curfman McInnes .keywords: log, event, begin
51897bb86f7SLois Curfman McInnes M*/
51997bb86f7SLois Curfman McInnes 
520d7a720efSLois Curfman McInnes /*MC
52119b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
52297bb86f7SLois Curfman McInnes 
52397bb86f7SLois Curfman McInnes    Input Parameters:
52435aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
52597bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
52697bb86f7SLois Curfman McInnes 
52797bb86f7SLois Curfman McInnes    Synopsis:
528682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
52997bb86f7SLois Curfman McInnes                 PetscObject o4)
53097bb86f7SLois Curfman McInnes 
53197bb86f7SLois Curfman McInnes    Notes:
532b951964fSBarry Smith    You should also register each additional integer event with the command
53397bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
534*3a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
53597bb86f7SLois Curfman McInnes 
53697bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
537*3a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
53897bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
53997bb86f7SLois Curfman McInnes    to supplement this PETSc information.
54097bb86f7SLois Curfman McInnes 
54197bb86f7SLois Curfman McInnes     Example of Usage:
54235aab85fSBarry Smith $     int USER_EVENT;
5430eb211faSLois Curfman McInnes $     int user_event_flops;
544b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
54597bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
54697bb86f7SLois Curfman McInnes $        [code segment to monitor]
5470eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
54897bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
54997bb86f7SLois Curfman McInnes 
55097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
55197bb86f7SLois Curfman McInnes 
55297bb86f7SLois Curfman McInnes .keywords: log, event, end
55397bb86f7SLois Curfman McInnes M*/
55497bb86f7SLois Curfman McInnes 
555005c665bSBarry Smith /*MC
556005c665bSBarry Smith    PLogEventBarrierBegin - Logs the time in a barrier before an event.
557005c665bSBarry Smith 
558005c665bSBarry Smith    Input Parameters:
559005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
560005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
561005c665bSBarry Smith .  comm - communicator the barrier takes place over
562005c665bSBarry Smith 
563005c665bSBarry Smith    Synopsis:
564005c665bSBarry Smith    void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
565005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
566005c665bSBarry Smith 
567005c665bSBarry Smith    Notes:
568005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
569005c665bSBarry Smith    that requires synchronization.
570005c665bSBarry Smith 
571005c665bSBarry Smith     Example of Usage:
572005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
573005c665bSBarry Smith $       MPI_Allreduce()
574005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
575005c665bSBarry Smith 
576005c665bSBarry Smith    Additional Notes:
577005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
578005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
579005c665bSBarry Smith 
580005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
581005c665bSBarry Smith           PLogEventBarrierEnd()
582005c665bSBarry Smith 
583005c665bSBarry Smith .keywords: log, event, begin, barrier
584005c665bSBarry Smith M*/
585005c665bSBarry Smith 
586005c665bSBarry Smith /*MC
587005c665bSBarry Smith    PLogEventBarrierEnd - Logs the time in a barrier before an event.
588005c665bSBarry Smith 
589005c665bSBarry Smith    Input Parameters:
590005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
591005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
592005c665bSBarry Smith .  comm - communicator the barrier takes place over
593005c665bSBarry Smith 
594005c665bSBarry Smith    Synopsis:
595005c665bSBarry Smith    void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
596005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
597005c665bSBarry Smith 
598005c665bSBarry Smith    Notes:
599005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
600005c665bSBarry Smith    that requires synchronization.
601005c665bSBarry Smith 
602005c665bSBarry Smith     Example of Usage:
603005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
604005c665bSBarry Smith $       MPI_Allreduce()
605005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
606005c665bSBarry Smith 
607005c665bSBarry Smith    Additional Notes:
608005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
609005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
610005c665bSBarry Smith 
611005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
612005c665bSBarry Smith           PLogEventBarrierBegin()
613005c665bSBarry Smith 
614005c665bSBarry Smith .keywords: log, event, begin, barrier
615005c665bSBarry Smith M*/
616e0937024SBarry Smith 
61797bb86f7SLois Curfman McInnes #endif
61841debaddSBarry Smith 
61977c4ece6SBarry Smith 
62077c4ece6SBarry Smith 
62184cb2905SBarry Smith 
62284cb2905SBarry Smith 
62384cb2905SBarry Smith 
624