xref: /petsc/include/petsclog.h (revision df8cf0b5d7313c8365df37cd863c8df5128f7f74)
1*df8cf0b5SBarry Smith /* $Id: petsclog.h,v 1.112 1997/09/08 15:00:33 bsmith 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*df8cf0b5SBarry Smith #if defined(PETSC_LOG)  /* --- Logging is turned on --------------------------------*/
142614700edSBarry Smith 
143a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
14477c4ece6SBarry Smith 
14577c4ece6SBarry Smith #if defined (HAVE_MPE)
14677c4ece6SBarry Smith #include "mpe.h"
147614700edSBarry Smith #define MPEBEGIN    1000
14877c4ece6SBarry Smith extern int PLogMPEBegin();
14977c4ece6SBarry Smith extern int PLogMPEDump(char *);
150614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
151614700edSBarry Smith extern int PLogEventMPEActivate(int);
152905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int);
153614700edSBarry Smith #else
154c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0
155c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0
15677c4ece6SBarry Smith #endif
15777c4ece6SBarry Smith 
158614700edSBarry Smith extern int PLogEventActivate(int);
159905e6a2fSBarry Smith extern int PLogEventDeactivate(int);
160614700edSBarry Smith 
1613e584e2eSBarry Smith extern int PLogEventActivateClass(int);
1623e584e2eSBarry Smith extern int PLogEventDeactivateClass(int);
163614700edSBarry Smith 
164614700edSBarry Smith extern int PLogEventFlags[];
165b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
166b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
167b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject);
168b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject);
16977c4ece6SBarry Smith 
17077c4ece6SBarry Smith #if defined(HAVE_MPE)
171005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
172005c665bSBarry Smith   { \
173005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[e]) {                           \
174005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
175005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
176005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,"");\
177005c665bSBarry Smith       MPI_Barrier(cm);                                             \
178005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
179005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
180005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
181005c665bSBarry Smith     }                                                                \
182005c665bSBarry Smith     PLogEventBegin(e+1,o1,o2,o3,o4);                                   \
183005c665bSBarry Smith     if (UseMPE && PLogEventMPEFlags[(e)+1])\
184005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
185005c665bSBarry Smith   }
186a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
18756cd22aeSBarry Smith   {  \
188005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
189005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
190005c665bSBarry Smith    if (UseMPE && PLogEventMPEFlags[(e)])\
191005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
19277c4ece6SBarry Smith   }
19377c4ece6SBarry Smith #else
194005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
195005c665bSBarry Smith   { \
196005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[(e)]) {                           \
197005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
198005c665bSBarry Smith       MPI_Barrier(cm);                                             \
199005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
200005c665bSBarry Smith     }                                                                \
201005c665bSBarry Smith     PLogEventBegin((e)+1,o1,o2,o3,o4);                                   \
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));\
20777c4ece6SBarry Smith   }
20877c4ece6SBarry Smith #endif
20977c4ece6SBarry Smith 
21077c4ece6SBarry Smith #if defined(HAVE_MPE)
211005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
212005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
213005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
214005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)+1])\
215005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\
216005c665bSBarry Smith   }
21777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
218005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
219005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
220005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)])\
221005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
222a1b5d808SSatish Balay   }
22377c4ece6SBarry Smith #else
224005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
225005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
226005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
227005c665bSBarry Smith   }
22877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
229005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
230005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
231a1b5d808SSatish Balay   }
23277c4ece6SBarry Smith #endif
23377c4ece6SBarry Smith 
23477c4ece6SBarry Smith 
23577c4ece6SBarry Smith #define PLogObjectParent(p,c)       {PetscValidHeader((PetscObject)c); \
23677c4ece6SBarry Smith                                      PetscValidHeader((PetscObject)p);\
23777c4ece6SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
23877c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
23977c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
240b3bbe94bSBarry Smith #define PLogObjectCreate(h)         {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);}
241b3bbe94bSBarry Smith #define PLogObjectDestroy(h)        {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);}
24277c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
24377c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
24477c4ece6SBarry Smith extern int        PLogObjectState(PetscObject,char *,...);
24577c4ece6SBarry Smith extern int        PLogDestroy();
24677c4ece6SBarry Smith extern int        PLogStagePush(int);
24777c4ece6SBarry Smith extern int        PLogStagePop();
24877c4ece6SBarry Smith extern int        PLogStageRegister(int,char*);
2493044e3d5SSatish Balay extern int        PLogPrintSummary(MPI_Comm,char *);
250edde42fcSLois Curfman McInnes extern int        PLogBegin();
251bc1211c7SBarry Smith extern int        PLogTraceBegin(FILE *);
252edde42fcSLois Curfman McInnes extern int        PLogAllBegin();
253bc1211c7SBarry Smith extern int        PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
254bc1211c7SBarry Smith                           int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
255edde42fcSLois Curfman McInnes extern int        PLogDump(char*);
256edde42fcSLois Curfman McInnes extern int        PLogEventRegister(int*,char*,char*);
25747794344SBarry Smith extern PLogDouble PetscGetFlops();
25877c4ece6SBarry Smith 
25947794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct;
26047794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len;
26147794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
262ce85283eSBarry Smith /*
26384cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
264ce85283eSBarry Smith    uses macros to defined the MPI operations.
26515308354SBarry Smith 
26615308354SBarry Smith      It does not work correctly from HP-UX because it processes the
26715308354SBarry Smith    macros in a way that sometimes it double counts.
2687c1e34a4SSatish Balay 
2697c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
270ce85283eSBarry Smith */
271a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt)
27277a39924SBarry Smith /*
27377a39924SBarry Smith    Logging of MPI activities
27477a39924SBarry Smith */
27577a39924SBarry Smith 
27677a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
27777a39924SBarry Smith {                                                                                \
27877a39924SBarry Smith   if (type == MPIU_SCALAR) {                                                     \
27947794344SBarry Smith     buff += (PLogDouble) ((count)*sizeof(Scalar));                               \
28077a39924SBarry Smith   } else if (type == MPI_INT) {                                                  \
28147794344SBarry Smith     buff += (PLogDouble) ((count)*sizeof(int));                                  \
28277a39924SBarry Smith   } else {                                                                       \
28347794344SBarry Smith     int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \
28477a39924SBarry Smith   }                                                                              \
28577a39924SBarry Smith }
28677a39924SBarry Smith 
28777a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request)        \
28877a39924SBarry Smith {                                                                            \
28977a39924SBarry Smith   MPI_Irecv( buf, count,  datatype, source, tag, comm, request);             \
29077a39924SBarry Smith   irecv_ct++; TypeSize(irecv_len,count,datatype);                            \
29177a39924SBarry Smith }
29215308354SBarry Smith 
29377a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request)          \
29477a39924SBarry Smith {                                                                            \
29577a39924SBarry Smith   MPI_Isend( buf, count,  datatype, dest, tag, comm, request);               \
296e0937024SBarry Smith   isend_ct++;   TypeSize(isend_len,count,datatype);                          \
29777a39924SBarry Smith }
29815308354SBarry Smith 
2990d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests)                                    \
3000d4b0b6cSBarry Smith {                                                                                     \
3010d4b0b6cSBarry Smith   MPI_Startall( number, requests);                                                    \
30247794344SBarry Smith   irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \
3030d4b0b6cSBarry Smith }
3040d4b0b6cSBarry Smith 
3050d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests)                                    \
3060d4b0b6cSBarry Smith {                                                                                     \
3070d4b0b6cSBarry Smith   MPI_Startall( number, requests);                                                    \
30847794344SBarry Smith   isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \
3090d4b0b6cSBarry Smith }
3100d4b0b6cSBarry Smith 
3110d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests)                                     \
3120d4b0b6cSBarry Smith {                                                                             \
3130d4b0b6cSBarry Smith   MPI_Start( requests);                                                       \
31447794344SBarry Smith   isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar));               \
3150d4b0b6cSBarry Smith }
3160d4b0b6cSBarry Smith 
317ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status)           \
318ce85283eSBarry Smith {                                                                             \
319ce85283eSBarry Smith   MPI_Recv( buf, count,  datatype, source, tag, comm, status);                \
320ce85283eSBarry Smith   recv_ct++; TypeSize(recv_len,count,datatype);                               \
321ce85283eSBarry Smith }
32215308354SBarry Smith 
32377a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm)                     \
32477a39924SBarry Smith {                                                                             \
32577a39924SBarry Smith   MPI_Send( buf, count,  datatype, dest, tag, comm);                          \
326e0937024SBarry Smith   send_ct++;  TypeSize(send_len,count,datatype);                              \
32777a39924SBarry Smith }
32877a39924SBarry Smith 
32977a39924SBarry Smith #define MPI_Wait(request, status) \
33077a39924SBarry Smith (                                 \
331e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,   \
33277a39924SBarry Smith   MPI_Wait(request, status)       \
33377a39924SBarry Smith )
33477a39924SBarry Smith 
33577a39924SBarry Smith #define MPI_Waitany(a, b, c, d)     \
33677a39924SBarry Smith (                                   \
337e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++, \
33877a39924SBarry Smith   MPI_Waitany(a, b, c, d)           \
33977a39924SBarry Smith )
34077a39924SBarry Smith 
34177a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
34277a39924SBarry Smith (                                                                \
34347794344SBarry Smith   wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count),        \
34477a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses)       \
34577a39924SBarry Smith )
34677a39924SBarry Smith 
34777a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
348005c665bSBarry Smith     (allreduce_ct++,MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm))
3493914022bSBarry Smith 
3500d4b0b6cSBarry Smith #else
3510d4b0b6cSBarry Smith 
3520d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \
3530d4b0b6cSBarry Smith {                                                  \
3540d4b0b6cSBarry Smith   MPI_Startall( number, requests);                 \
3550d4b0b6cSBarry Smith }
3560d4b0b6cSBarry Smith 
3570d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \
3580d4b0b6cSBarry Smith {                                                  \
3590d4b0b6cSBarry Smith   MPI_Startall( number, requests);                 \
3600d4b0b6cSBarry Smith }
3610d4b0b6cSBarry Smith 
3620d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests) \
3630d4b0b6cSBarry Smith {                                         \
3640d4b0b6cSBarry Smith   MPI_Start( requests);                   \
3650d4b0b6cSBarry Smith }
3660d4b0b6cSBarry Smith 
36715308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */
368614700edSBarry Smith 
369*df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
370614700edSBarry Smith 
371614700edSBarry Smith #define PLogFlops(n)
372614700edSBarry Smith 
373*df8cf0b5SBarry Smith /*
374*df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
375*df8cf0b5SBarry Smith */
376614700edSBarry Smith #define MPEBEGIN                  1000
377*df8cf0b5SBarry Smith #define PLogMPEBegin()
378*df8cf0b5SBarry Smith #define PLogMPEDump(a)
379bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
380bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
381614700edSBarry Smith 
382bf343e40SBarry Smith #define PLogEventActivate(a)   0
383bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
384614700edSBarry Smith 
385bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
386bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
38777c4ece6SBarry Smith 
388b3bbe94bSBarry Smith #define _PLogPLB                        0
389b3bbe94bSBarry Smith #define _PLogPLE                        0
390b3bbe94bSBarry Smith #define _PLogPHC                        0
391b3bbe94bSBarry Smith #define _PLogPHD                        0
392a5558d3fSBarry Smith #define PetscGetFlops()               0.0
393d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
394d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
395005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
396005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
397d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
398d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
399d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
400d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
401d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
402d7a720efSLois Curfman McInnes #define PLogDestroy()
403bf343e40SBarry Smith #define PLogStagePush(a)
404d7a720efSLois Curfman McInnes #define PLogStagePop()
405d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
406d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
407d7a720efSLois Curfman McInnes #define PLogBegin()
408974088aaSSatish Balay #define PLogTraceBegin(file)            0
409bc1211c7SBarry Smith #define PLogSet(lb,le)
410d7a720efSLois Curfman McInnes #define PLogAllBegin()
411d7a720efSLois Curfman McInnes #define PLogDump(char)
412dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
413d7a720efSLois Curfman McInnes #define PLogMPEBegin()
414d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
4157f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
416ce6058e1SBarry Smith 
417ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */
418ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \
419ce6058e1SBarry Smith {                                                  \
420ce6058e1SBarry Smith   MPI_Startall( number, requests);                 \
421ce6058e1SBarry Smith }
422ce6058e1SBarry Smith 
423ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \
424ce6058e1SBarry Smith {                                                  \
425ce6058e1SBarry Smith   MPI_Startall( number, requests);                 \
426ce6058e1SBarry Smith }
427ce6058e1SBarry Smith 
428ce6058e1SBarry Smith #define MPI_Start_isend(count,  requests) \
429ce6058e1SBarry Smith {                                         \
430ce6058e1SBarry Smith   MPI_Start( requests);                   \
431ce6058e1SBarry Smith }
432ce6058e1SBarry Smith #endif   /* PETSC_LOG */
4336daaf66cSBarry Smith 
4348b6d568bSLois Curfman McInnes /*MC
43519b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
43619b02663SBarry Smith 
43719b02663SBarry Smith    Input Parameter:
43819b02663SBarry Smith .  f - flop counter
43919b02663SBarry Smith 
44019b02663SBarry Smith    Synopsis:
441682ac3c9SWilliam Gropp    void PLogFlops(int f)
44219b02663SBarry Smith 
44319b02663SBarry Smith    Notes:
44419b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
44519b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
44619b02663SBarry Smith    application code.
44719b02663SBarry Smith 
44819b02663SBarry Smith    PETSc automatically logs library events if the code has been
44919b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
45019b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
45119b02663SBarry Smith    intended for logging user flops to supplement this PETSc
45219b02663SBarry Smith    information.
45319b02663SBarry Smith 
45419b02663SBarry Smith     Example of Usage:
45535aab85fSBarry Smith $     int USER_EVENT;
456b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
45719b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
45819b02663SBarry Smith $        [code segment to monitor]
45919b02663SBarry Smith $        PLogFlops(user_flops)
46019b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
46119b02663SBarry Smith 
46258cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops()
46319b02663SBarry Smith 
464edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
46519b02663SBarry Smith M*/
46619b02663SBarry Smith 
46797bb86f7SLois Curfman McInnes 
468d7a720efSLois Curfman McInnes /*MC
46919b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
47097bb86f7SLois Curfman McInnes 
47197bb86f7SLois Curfman McInnes    Input Parameters:
47235aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
47397bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
47497bb86f7SLois Curfman McInnes 
47597bb86f7SLois Curfman McInnes    Synopsis:
476682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
47797bb86f7SLois Curfman McInnes                   PetscObject o4)
47897bb86f7SLois Curfman McInnes 
47997bb86f7SLois Curfman McInnes    Notes:
48097bb86f7SLois Curfman McInnes    You should also register each integer event with the command
48197bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
48297bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
48397bb86f7SLois Curfman McInnes 
48497bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
48597bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
48697bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
48797bb86f7SLois Curfman McInnes    to supplement this PETSc information.
48897bb86f7SLois Curfman McInnes 
48997bb86f7SLois Curfman McInnes     Example of Usage:
49035aab85fSBarry Smith $     int USER_EVENT;
4910eb211faSLois Curfman McInnes $     int user_event_flops;
492b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
49335aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
49497bb86f7SLois Curfman McInnes $        [code segment to monitor]
4950eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
49635aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
49797bb86f7SLois Curfman McInnes 
49897bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
49997bb86f7SLois Curfman McInnes 
50097bb86f7SLois Curfman McInnes .keywords: log, event, begin
50197bb86f7SLois Curfman McInnes M*/
50297bb86f7SLois Curfman McInnes 
503d7a720efSLois Curfman McInnes /*MC
50419b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
50597bb86f7SLois Curfman McInnes 
50697bb86f7SLois Curfman McInnes    Input Parameters:
50735aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
50897bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
50997bb86f7SLois Curfman McInnes 
51097bb86f7SLois Curfman McInnes    Synopsis:
511682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
51297bb86f7SLois Curfman McInnes                 PetscObject o4)
51397bb86f7SLois Curfman McInnes 
51497bb86f7SLois Curfman McInnes    Notes:
515b951964fSBarry Smith    You should also register each additional integer event with the command
51697bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
51797bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
51897bb86f7SLois Curfman McInnes 
51997bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
52097bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
52197bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
52297bb86f7SLois Curfman McInnes    to supplement this PETSc information.
52397bb86f7SLois Curfman McInnes 
52497bb86f7SLois Curfman McInnes     Example of Usage:
52535aab85fSBarry Smith $     int USER_EVENT;
5260eb211faSLois Curfman McInnes $     int user_event_flops;
527b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
52897bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
52997bb86f7SLois Curfman McInnes $        [code segment to monitor]
5300eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
53197bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
53297bb86f7SLois Curfman McInnes 
53397bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
53497bb86f7SLois Curfman McInnes 
53597bb86f7SLois Curfman McInnes .keywords: log, event, end
53697bb86f7SLois Curfman McInnes M*/
53797bb86f7SLois Curfman McInnes 
538005c665bSBarry Smith /*MC
539005c665bSBarry Smith    PLogEventBarrierBegin - Logs the time in a barrier before an event.
540005c665bSBarry Smith 
541005c665bSBarry Smith    Input Parameters:
542005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
543005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
544005c665bSBarry Smith .  comm - communicator the barrier takes place over
545005c665bSBarry Smith 
546005c665bSBarry Smith    Synopsis:
547005c665bSBarry Smith    void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
548005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
549005c665bSBarry Smith 
550005c665bSBarry Smith    Notes:
551005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
552005c665bSBarry Smith    that requires synchronization.
553005c665bSBarry Smith 
554005c665bSBarry Smith     Example of Usage:
555005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
556005c665bSBarry Smith $       MPI_Allreduce()
557005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
558005c665bSBarry Smith 
559005c665bSBarry Smith    Additional Notes:
560005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
561005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
562005c665bSBarry Smith 
563005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
564005c665bSBarry Smith           PLogEventBarrierEnd()
565005c665bSBarry Smith 
566005c665bSBarry Smith .keywords: log, event, begin, barrier
567005c665bSBarry Smith M*/
568005c665bSBarry Smith 
569005c665bSBarry Smith /*MC
570005c665bSBarry Smith    PLogEventBarrierEnd - Logs the time in a barrier before an event.
571005c665bSBarry Smith 
572005c665bSBarry Smith    Input Parameters:
573005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
574005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
575005c665bSBarry Smith .  comm - communicator the barrier takes place over
576005c665bSBarry Smith 
577005c665bSBarry Smith    Synopsis:
578005c665bSBarry Smith    void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
579005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
580005c665bSBarry Smith 
581005c665bSBarry Smith    Notes:
582005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
583005c665bSBarry Smith    that requires synchronization.
584005c665bSBarry Smith 
585005c665bSBarry Smith     Example of Usage:
586005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
587005c665bSBarry Smith $       MPI_Allreduce()
588005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
589005c665bSBarry Smith 
590005c665bSBarry Smith    Additional Notes:
591005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
592005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
593005c665bSBarry Smith 
594005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
595005c665bSBarry Smith           PLogEventBarrierBegin()
596005c665bSBarry Smith 
597005c665bSBarry Smith .keywords: log, event, begin, barrier
598005c665bSBarry Smith M*/
599e0937024SBarry Smith 
60097bb86f7SLois Curfman McInnes #endif
60141debaddSBarry Smith 
60277c4ece6SBarry Smith 
60377c4ece6SBarry Smith 
60484cb2905SBarry Smith 
60584cb2905SBarry Smith 
60684cb2905SBarry Smith 
607