xref: /petsc/include/petsclog.h (revision 1d508c8ca7d0026f394cc873be043f015d59febc)
1*1d508c8cSSatish Balay /* $Id: petsclog.h,v 1.117 1998/03/23 21:27:32 bsmith Exp balay $ */
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
57ca161407SBarry Smith #define MAT_Partitioning                        36
5897bb86f7SLois Curfman McInnes 
59005c665bSBarry Smith #define VEC_ScatterBarrier                      39
604dcbc457SBarry Smith #define VEC_Dot                                 40
614dcbc457SBarry Smith #define VEC_Norm                                41
624dcbc457SBarry Smith #define VEC_Max                                 42
634dcbc457SBarry Smith #define VEC_Min                                 43
644dcbc457SBarry Smith #define VEC_TDot                                44
654dcbc457SBarry Smith #define VEC_Scale                               45
664dcbc457SBarry Smith #define VEC_Copy                                46
674dcbc457SBarry Smith #define VEC_Set                                 47
684dcbc457SBarry Smith #define VEC_AXPY                                48
694dcbc457SBarry Smith #define VEC_AYPX                                49
704dcbc457SBarry Smith #define VEC_Swap                                50
714dcbc457SBarry Smith #define VEC_WAXPY                               51
724dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
734dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
744dcbc457SBarry Smith #define VEC_MTDot                               54
754dcbc457SBarry Smith #define VEC_MDot                                55
764dcbc457SBarry Smith #define VEC_MAXPY                               56
774dcbc457SBarry Smith #define VEC_PMult                               57
784dcbc457SBarry Smith #define VEC_SetValues                           58
794dcbc457SBarry Smith #define VEC_Load                                59
804dcbc457SBarry Smith #define VEC_View                                60
814dcbc457SBarry Smith #define VEC_ScatterBegin                        61
824dcbc457SBarry Smith #define VEC_ScatterEnd                          62
83bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
8497bb86f7SLois Curfman McInnes 
85005c665bSBarry Smith #define VEC_NormBarrier                         64
86005c665bSBarry Smith #define VEC_NormComm                            65
87005c665bSBarry Smith #define VEC_DotBarrier                          66
88005c665bSBarry Smith #define VEC_DotComm                             67
89005c665bSBarry Smith #define VEC_MDotBarrier                         68
90005c665bSBarry Smith #define VEC_MDotComm                            69
91005c665bSBarry Smith 
924dcbc457SBarry Smith #define SLES_Solve                              70
934dcbc457SBarry Smith #define SLES_SetUp                              71
9497bb86f7SLois Curfman McInnes 
954dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
9697bb86f7SLois Curfman McInnes 
971bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices                    74
984dcbc457SBarry Smith #define PC_SetUp                                75
9936058207SBarry Smith #define PC_SetUpOnBlocks                        76
10032284f49SSatish Balay #define PC_Apply                                77
101614700edSBarry Smith #define PC_ApplySymmetricLeft                   78
102614700edSBarry Smith #define PC_ApplySymmetricRight                  79
1034dcbc457SBarry Smith 
1044dcbc457SBarry Smith #define SNES_Solve                              80
1054dcbc457SBarry Smith #define SNES_LineSearch                         81
1064dcbc457SBarry Smith #define SNES_FunctionEval                       82
1074dcbc457SBarry Smith #define SNES_JacobianEval                       83
1084dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
1094dcbc457SBarry Smith #define SNES_GradientEval                       85
1104dcbc457SBarry Smith #define SNES_HessianEval                        86
1114dcbc457SBarry Smith 
112682d7d0cSBarry Smith #define TS_Step                                 90
113bf343e40SBarry Smith #define TS_PseudoComputeTimeStep                91
11472936c9dSBarry Smith 
11572936c9dSBarry Smith #define Petsc_Barrier                           100
11655206aebSLois Curfman McInnes 
1170513a670SBarry Smith #define EC_SetUp                                105
1180513a670SBarry Smith #define EC_Solve                                106
1190513a670SBarry Smith 
12055206aebSLois Curfman McInnes #define DFVec_RefineVector                      110
12155206aebSLois Curfman McInnes #define DFVec_AssembleFullVector                111
12255206aebSLois Curfman McInnes #define DFVec_GetComponentVectors               112
12355206aebSLois Curfman McInnes #define DFVec_DrawContours                      113
12455206aebSLois Curfman McInnes 
12541debaddSBarry Smith /*
126b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
12777c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
128b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
12941debaddSBarry Smith */
13035aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1314dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
13297bb86f7SLois Curfman McInnes 
13319b02663SBarry Smith /* Global flop counter */
13447794344SBarry Smith extern PLogDouble _TotalFlops;
13519b02663SBarry Smith 
136edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
13794a424c1SBarry Smith extern int PLogInfo(void*,char*,...);
138cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int);
139614700edSBarry Smith extern int PLogInfoActivateClass(int);
14043a90d84SBarry Smith extern int PLogPrintInfo;  /* if 1, indicates PLogInfo() is turned on */
141614700edSBarry Smith 
1423a40ed3dSBarry Smith #if defined(USE_PETSC_LOG)  /* --- Logging is turned on --------------------------------*/
143614700edSBarry Smith 
144da63de55SLois Curfman McInnes /*
145da63de55SLois Curfman McInnes    Flop counting:  We count each arithmetic operation (e.g., addition, multiplication) separately.
146da63de55SLois Curfman McInnes 
147da63de55SLois Curfman McInnes    For the complex numbers version, note that
148da63de55SLois Curfman McInnes        1 complex addition = 2 flops
149da63de55SLois Curfman McInnes        1 complex multiplication = 6 flops,
150da63de55SLois Curfman McInnes    where we define 1 flop as that for a double precision scalar.  We roughly approximate
151da63de55SLois Curfman McInnes    flop counting for complex numbers by multiplying the total flops by 4; this corresponds
152da63de55SLois Curfman McInnes    to the assumption that we're counting mostly additions and multiplications -- and
153da63de55SLois Curfman McInnes    roughly the same number of each.  More accurate counting could be done by distinguishing
154da63de55SLois Curfman McInnes    among the various arithmetic operations.
155da63de55SLois Curfman McInnes  */
156da63de55SLois Curfman McInnes 
1573a40ed3dSBarry Smith #if defined(USE_PETSC_COMPLEX)
158da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);}
159da63de55SLois Curfman McInnes #else
160a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
161da63de55SLois Curfman McInnes #endif
16277c4ece6SBarry Smith 
16377c4ece6SBarry Smith #if defined (HAVE_MPE)
16477c4ece6SBarry Smith #include "mpe.h"
165614700edSBarry Smith #define MPEBEGIN    1000
166cf256101SBarry Smith extern int PLogMPEBegin(void);
16777c4ece6SBarry Smith extern int PLogMPEDump(char *);
168614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
169614700edSBarry Smith extern int PLogEventMPEActivate(int);
170905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int);
171614700edSBarry Smith #else
172c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0
173c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0
17477c4ece6SBarry Smith #endif
17577c4ece6SBarry Smith 
176614700edSBarry Smith extern int PLogEventActivate(int);
177905e6a2fSBarry Smith extern int PLogEventDeactivate(int);
178614700edSBarry Smith 
1793e584e2eSBarry Smith extern int PLogEventActivateClass(int);
1803e584e2eSBarry Smith extern int PLogEventDeactivateClass(int);
181614700edSBarry Smith 
182614700edSBarry Smith extern int PLogEventFlags[];
183b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
184b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
185b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject);
186b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject);
18777c4ece6SBarry Smith 
18877c4ece6SBarry Smith #if defined(HAVE_MPE)
189005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
190005c665bSBarry Smith   { \
191005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[e]) {                           \
192005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
193005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
194005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,"");\
195005c665bSBarry Smith       MPI_Barrier(cm);                                             \
196005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
197005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
198005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
199005c665bSBarry Smith     }                                                                \
200005c665bSBarry Smith     PLogEventBegin(e+1,o1,o2,o3,o4);                                   \
201005c665bSBarry Smith     if (UseMPE && PLogEventMPEFlags[(e)+1])\
202005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
203005c665bSBarry Smith   }
204a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
20556cd22aeSBarry Smith   {  \
206005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
207005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
208005c665bSBarry Smith    if (UseMPE && PLogEventMPEFlags[(e)])\
209005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
21077c4ece6SBarry Smith   }
21177c4ece6SBarry Smith #else
212005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
213005c665bSBarry Smith   { \
214005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[(e)]) {                           \
215005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
216005c665bSBarry Smith       MPI_Barrier(cm);                                             \
217005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
218005c665bSBarry Smith     }                                                                \
219005c665bSBarry Smith     PLogEventBegin((e)+1,o1,o2,o3,o4);                                   \
220005c665bSBarry Smith   }
221a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
22256cd22aeSBarry Smith   {  \
223005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
224005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
22577c4ece6SBarry Smith   }
22677c4ece6SBarry Smith #endif
22777c4ece6SBarry Smith 
22877c4ece6SBarry Smith #if defined(HAVE_MPE)
229005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
230005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
231005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
232005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)+1])\
233005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\
234005c665bSBarry Smith   }
23577c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
236005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
237005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
238005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)])\
239005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
240a1b5d808SSatish Balay   }
24177c4ece6SBarry Smith #else
242005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
243005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
244005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
245005c665bSBarry Smith   }
24677c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
247005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
248005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
249a1b5d808SSatish Balay   }
25077c4ece6SBarry Smith #endif
25177c4ece6SBarry Smith 
25277c4ece6SBarry Smith 
2533a40ed3dSBarry Smith #define PLogObjectParent(p,c)       if (c) {PetscValidHeader((PetscObject)(c)); \
2543a40ed3dSBarry Smith                                      PetscValidHeader((PetscObject)(p));\
2553a40ed3dSBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) (p);}
25677c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
25777c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
258b3bbe94bSBarry Smith #define PLogObjectCreate(h)         {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);}
259b3bbe94bSBarry Smith #define PLogObjectDestroy(h)        {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);}
26077c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
26177c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
26277c4ece6SBarry Smith extern int        PLogObjectState(PetscObject,char *,...);
263cf256101SBarry Smith extern int        PLogDestroy(void);
26477c4ece6SBarry Smith extern int        PLogStagePush(int);
265*1d508c8cSSatish Balay extern int        PLogStagePop(void);
26677c4ece6SBarry Smith extern int        PLogStageRegister(int,char*);
2673044e3d5SSatish Balay extern int        PLogPrintSummary(MPI_Comm,char *);
268*1d508c8cSSatish Balay extern int        PLogBegin(void);
269bc1211c7SBarry Smith extern int        PLogTraceBegin(FILE *);
270*1d508c8cSSatish Balay extern int        PLogAllBegin(void);
271bc1211c7SBarry Smith extern int        PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
272bc1211c7SBarry Smith                           int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
273edde42fcSLois Curfman McInnes extern int        PLogDump(char*);
274edde42fcSLois Curfman McInnes extern int        PLogEventRegister(int*,char*,char*);
275*1d508c8cSSatish Balay extern PLogDouble PetscGetFlops(void);
27677c4ece6SBarry Smith 
27747794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct;
27847794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len;
27947794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
280ca161407SBarry Smith extern int        PETSC_DUMMY,PETSC_DUMMY_SIZE;
281ca161407SBarry Smith 
282ce85283eSBarry Smith /*
28384cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
284ce85283eSBarry Smith    uses macros to defined the MPI operations.
28515308354SBarry Smith 
28615308354SBarry Smith      It does not work correctly from HP-UX because it processes the
28715308354SBarry Smith    macros in a way that sometimes it double counts.
2887c1e34a4SSatish Balay 
2897c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
290ce85283eSBarry Smith */
291a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt)
29277a39924SBarry Smith /*
29377a39924SBarry Smith    Logging of MPI activities
29477a39924SBarry Smith */
29577a39924SBarry Smith 
29677a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
297ca161407SBarry Smith (                                                                                \
298ca161407SBarry Smith   MPI_Type_size(type,&PETSC_DUMMY_SIZE), buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \
299ca161407SBarry Smith )
30077a39924SBarry Smith 
30177a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request)        \
302ca161407SBarry Smith (                                                                            \
303ca161407SBarry Smith   PETSC_DUMMY = MPI_Irecv( buf, count,  datatype, source, tag, comm, request),             \
304ca161407SBarry Smith   irecv_ct++, TypeSize(irecv_len,count,datatype),PETSC_DUMMY                            \
305ca161407SBarry Smith )
30615308354SBarry Smith 
30777a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request)          \
308ca161407SBarry Smith (                                                                            \
309ca161407SBarry Smith   PETSC_DUMMY = MPI_Isend( buf, count,  datatype, dest, tag, comm, request),               \
310ca161407SBarry Smith   isend_ct++,   TypeSize(isend_len,count,datatype),PETSC_DUMMY                          \
311ca161407SBarry Smith )
31215308354SBarry Smith 
3130d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests)                                     \
314ca161407SBarry Smith (                                                                                      \
315ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                     \
316ca161407SBarry Smith   irecv_ct += (PLogDouble)(number), irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
317ca161407SBarry Smith )
3180d4b0b6cSBarry Smith 
3190d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests)                                    \
320ca161407SBarry Smith (                                                                                     \
321ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                    \
322ca161407SBarry Smith   isend_ct += (PLogDouble)(number), isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
323ca161407SBarry Smith )
3240d4b0b6cSBarry Smith 
3250d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests)\
326ca161407SBarry Smith (\
327ca161407SBarry Smith   PETSC_DUMMY = MPI_Start( requests),\
328ca161407SBarry Smith   isend_ct++, isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\
329ca161407SBarry Smith )
3300d4b0b6cSBarry Smith 
331ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status)           \
332ca161407SBarry Smith (                                                                            \
333ca161407SBarry Smith   PETSC_DUMMY = MPI_Recv( buf, count,  datatype, source, tag, comm, status),                \
334ca161407SBarry Smith   recv_ct++, TypeSize(recv_len,count,datatype), PETSC_DUMMY                              \
335ca161407SBarry Smith )
33615308354SBarry Smith 
33777a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm)                     \
338ca161407SBarry Smith (                                                                             \
339ca161407SBarry Smith   PETSC_DUMMY = MPI_Send( buf, count,  datatype, dest, tag, comm),                          \
340ca161407SBarry Smith   send_ct++,  TypeSize(send_len,count,datatype),PETSC_DUMMY                              \
341ca161407SBarry Smith )
34277a39924SBarry Smith 
34377a39924SBarry Smith #define MPI_Wait(request, status) \
34477a39924SBarry Smith (                                 \
345e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,   \
34677a39924SBarry Smith   MPI_Wait(request, status)       \
34777a39924SBarry Smith )
34877a39924SBarry Smith 
34977a39924SBarry Smith #define MPI_Waitany(a, b, c, d)     \
35077a39924SBarry Smith (                                   \
351e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++, \
35277a39924SBarry Smith   MPI_Waitany(a, b, c, d)           \
35377a39924SBarry Smith )
35477a39924SBarry Smith 
35577a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
35677a39924SBarry Smith (                                                                \
35747794344SBarry Smith   wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count),        \
35877a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses)       \
35977a39924SBarry Smith )
36077a39924SBarry Smith 
36177a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
362005c665bSBarry Smith     (allreduce_ct++,MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm))
3633914022bSBarry Smith 
3640d4b0b6cSBarry Smith #else
3650d4b0b6cSBarry Smith 
3660d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \
367ca161407SBarry Smith (                                                  \
368ca161407SBarry Smith   MPI_Startall( number, requests)                 \
369ca161407SBarry Smith )
3700d4b0b6cSBarry Smith 
3710d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \
372ca161407SBarry Smith (                                                  \
373ca161407SBarry Smith   MPI_Startall( number, requests)                 \
374ca161407SBarry Smith )
3750d4b0b6cSBarry Smith 
3760d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests) \
377ca161407SBarry Smith (                                         \
378ca161407SBarry Smith   MPI_Start( requests)                   \
379ca161407SBarry Smith )
3800d4b0b6cSBarry Smith 
38115308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */
382614700edSBarry Smith 
383df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
384614700edSBarry Smith 
385614700edSBarry Smith #define PLogFlops(n)
386614700edSBarry Smith 
387df8cf0b5SBarry Smith /*
388df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
389df8cf0b5SBarry Smith */
390614700edSBarry Smith #define MPEBEGIN                  1000
391df8cf0b5SBarry Smith #define PLogMPEBegin()
392df8cf0b5SBarry Smith #define PLogMPEDump(a)
393bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
394bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
395614700edSBarry Smith 
396bf343e40SBarry Smith #define PLogEventActivate(a)   0
397bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
398614700edSBarry Smith 
399bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
400bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
40177c4ece6SBarry Smith 
402b3bbe94bSBarry Smith #define _PLogPLB                        0
403b3bbe94bSBarry Smith #define _PLogPLE                        0
404b3bbe94bSBarry Smith #define _PLogPHC                        0
405b3bbe94bSBarry Smith #define _PLogPHD                        0
406a5558d3fSBarry Smith #define PetscGetFlops()               0.0
407d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
408d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
409005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
410005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
411d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
412d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
413d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
414d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
415d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
416d7a720efSLois Curfman McInnes #define PLogDestroy()
417bf343e40SBarry Smith #define PLogStagePush(a)
418d7a720efSLois Curfman McInnes #define PLogStagePop()
419d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
420d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
421d7a720efSLois Curfman McInnes #define PLogBegin()
422974088aaSSatish Balay #define PLogTraceBegin(file)            0
423bc1211c7SBarry Smith #define PLogSet(lb,le)
424d7a720efSLois Curfman McInnes #define PLogAllBegin()
425d7a720efSLois Curfman McInnes #define PLogDump(char)
426dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
427d7a720efSLois Curfman McInnes #define PLogMPEBegin()
428d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
4297f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
430ce6058e1SBarry Smith 
4313a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */
432ca161407SBarry Smith #define MPI_Startall_irecv( count,number,requests) MPI_Startall( number, requests)
433ce6058e1SBarry Smith 
434ca161407SBarry Smith #define MPI_Startall_isend( count,number,requests) MPI_Startall( number, requests)
435ce6058e1SBarry Smith 
436ca161407SBarry Smith #define MPI_Start_isend(count,  requests) MPI_Start( requests)
437ca161407SBarry Smith 
4383a40ed3dSBarry Smith #endif   /* USE_PETSC_LOG */
4396daaf66cSBarry Smith 
4408b6d568bSLois Curfman McInnes /*MC
44119b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
44219b02663SBarry Smith 
44319b02663SBarry Smith    Input Parameter:
44419b02663SBarry Smith .  f - flop counter
44519b02663SBarry Smith 
44619b02663SBarry Smith    Synopsis:
447682ac3c9SWilliam Gropp    void PLogFlops(int f)
44819b02663SBarry Smith 
44919b02663SBarry Smith    Notes:
45019b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
45119b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
45219b02663SBarry Smith    application code.
45319b02663SBarry Smith 
45419b02663SBarry Smith    PETSc automatically logs library events if the code has been
4553a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG (which is the default), and -log,
45619b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
45719b02663SBarry Smith    intended for logging user flops to supplement this PETSc
45819b02663SBarry Smith    information.
45919b02663SBarry Smith 
46019b02663SBarry Smith     Example of Usage:
46135aab85fSBarry Smith $     int USER_EVENT;
462b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
46319b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
46419b02663SBarry Smith $        [code segment to monitor]
46519b02663SBarry Smith $        PLogFlops(user_flops)
46619b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
46719b02663SBarry Smith 
46858cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops()
46919b02663SBarry Smith 
470edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
47119b02663SBarry Smith M*/
47219b02663SBarry Smith 
47397bb86f7SLois Curfman McInnes 
474d7a720efSLois Curfman McInnes /*MC
47519b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
47697bb86f7SLois Curfman McInnes 
47797bb86f7SLois Curfman McInnes    Input Parameters:
47835aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
47997bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
48097bb86f7SLois Curfman McInnes 
48197bb86f7SLois Curfman McInnes    Synopsis:
482682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
48397bb86f7SLois Curfman McInnes                   PetscObject o4)
48497bb86f7SLois Curfman McInnes 
48597bb86f7SLois Curfman McInnes    Notes:
48697bb86f7SLois Curfman McInnes    You should also register each integer event with the command
48797bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
4883a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
48997bb86f7SLois Curfman McInnes 
49097bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
4913a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
49297bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
49397bb86f7SLois Curfman McInnes    to supplement this PETSc information.
49497bb86f7SLois Curfman McInnes 
49597bb86f7SLois Curfman McInnes     Example of Usage:
49635aab85fSBarry Smith $     int USER_EVENT;
4970eb211faSLois Curfman McInnes $     int user_event_flops;
498b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
49935aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
50097bb86f7SLois Curfman McInnes $        [code segment to monitor]
5010eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
50235aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
50397bb86f7SLois Curfman McInnes 
50497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
50597bb86f7SLois Curfman McInnes 
50697bb86f7SLois Curfman McInnes .keywords: log, event, begin
50797bb86f7SLois Curfman McInnes M*/
50897bb86f7SLois Curfman McInnes 
509d7a720efSLois Curfman McInnes /*MC
51019b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
51197bb86f7SLois Curfman McInnes 
51297bb86f7SLois Curfman McInnes    Input Parameters:
51335aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
51497bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
51597bb86f7SLois Curfman McInnes 
51697bb86f7SLois Curfman McInnes    Synopsis:
517682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
51897bb86f7SLois Curfman McInnes                 PetscObject o4)
51997bb86f7SLois Curfman McInnes 
52097bb86f7SLois Curfman McInnes    Notes:
521b951964fSBarry Smith    You should also register each additional integer event with the command
52297bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
5233a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
52497bb86f7SLois Curfman McInnes 
52597bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
5263a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
52797bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
52897bb86f7SLois Curfman McInnes    to supplement this PETSc information.
52997bb86f7SLois Curfman McInnes 
53097bb86f7SLois Curfman McInnes     Example of Usage:
53135aab85fSBarry Smith $     int USER_EVENT;
5320eb211faSLois Curfman McInnes $     int user_event_flops;
533b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
53497bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
53597bb86f7SLois Curfman McInnes $        [code segment to monitor]
5360eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
53797bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
53897bb86f7SLois Curfman McInnes 
53997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
54097bb86f7SLois Curfman McInnes 
54197bb86f7SLois Curfman McInnes .keywords: log, event, end
54297bb86f7SLois Curfman McInnes M*/
54397bb86f7SLois Curfman McInnes 
544005c665bSBarry Smith /*MC
545005c665bSBarry Smith    PLogEventBarrierBegin - Logs the time in a barrier before an event.
546005c665bSBarry Smith 
547005c665bSBarry Smith    Input Parameters:
548005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
549005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
550005c665bSBarry Smith .  comm - communicator the barrier takes place over
551005c665bSBarry Smith 
552005c665bSBarry Smith    Synopsis:
553005c665bSBarry Smith    void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
554005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
555005c665bSBarry Smith 
556005c665bSBarry Smith    Notes:
557005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
558005c665bSBarry Smith    that requires synchronization.
559005c665bSBarry Smith 
560005c665bSBarry Smith     Example of Usage:
561005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
562005c665bSBarry Smith $       MPI_Allreduce()
563005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
564005c665bSBarry Smith 
565005c665bSBarry Smith    Additional Notes:
566005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
567005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
568005c665bSBarry Smith 
569005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
570005c665bSBarry Smith           PLogEventBarrierEnd()
571005c665bSBarry Smith 
572005c665bSBarry Smith .keywords: log, event, begin, barrier
573005c665bSBarry Smith M*/
574005c665bSBarry Smith 
575005c665bSBarry Smith /*MC
576005c665bSBarry Smith    PLogEventBarrierEnd - Logs the time in a barrier before an event.
577005c665bSBarry Smith 
578005c665bSBarry Smith    Input Parameters:
579005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
580005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
581005c665bSBarry Smith .  comm - communicator the barrier takes place over
582005c665bSBarry Smith 
583005c665bSBarry Smith    Synopsis:
584005c665bSBarry Smith    void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
585005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
586005c665bSBarry Smith 
587005c665bSBarry Smith    Notes:
588005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
589005c665bSBarry Smith    that requires synchronization.
590005c665bSBarry Smith 
591005c665bSBarry Smith     Example of Usage:
592005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
593005c665bSBarry Smith $       MPI_Allreduce()
594005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
595005c665bSBarry Smith 
596005c665bSBarry Smith    Additional Notes:
597005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
598005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
599005c665bSBarry Smith 
600005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
601005c665bSBarry Smith           PLogEventBarrierBegin()
602005c665bSBarry Smith 
603005c665bSBarry Smith .keywords: log, event, begin, barrier
604005c665bSBarry Smith M*/
605e0937024SBarry Smith 
60697bb86f7SLois Curfman McInnes #endif
60741debaddSBarry Smith 
60877c4ece6SBarry Smith 
60977c4ece6SBarry Smith 
61084cb2905SBarry Smith 
61184cb2905SBarry Smith 
61284cb2905SBarry Smith 
613