xref: /petsc/include/petsclog.h (revision 88d459dfb11b274ecd1d5bb99c83d4bd989a5877)
1*88d459dfSBarry Smith /* $Id: petsclog.h,v 1.121 1998/05/05 03:09:56 bsmith Exp bsmith $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
47588ac45SBarry Smith     Defines profile/logging in PETSc.
597bb86f7SLois Curfman McInnes */
697bb86f7SLois Curfman McInnes 
7*88d459dfSBarry Smith #if !defined(__PLOG_H)
8*88d459dfSBarry Smith #define __PLOG_H
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
1926cd32c0SSatish 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);
2651d508c8cSSatish Balay extern int  PLogStagePop(void);
26677c4ece6SBarry Smith extern int  PLogStageRegister(int,char*);
2673044e3d5SSatish Balay extern int  PLogPrintSummary(MPI_Comm,char *);
2681d508c8cSSatish Balay extern int  PLogBegin(void);
269bc1211c7SBarry Smith extern int  PLogTraceBegin(FILE *);
2701d508c8cSSatish 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*);
27599de4ba8SSatish Balay extern int  PetscGetFlops(PLogDouble*);
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
287bb4af37aSBarry Smith    macros in a way that sometimes it double counts, hence
288bb4af37aSBarry Smith    HAVE_BROKEN_RECURSIVE_MACRO
2897c1e34a4SSatish Balay 
2907c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
291ce85283eSBarry Smith */
292bb4af37aSBarry Smith #if !defined(PETSC_USING_MPIUNI) && !defined(HAVE_BROKEN_RECURSIVE_MACRO)
29377a39924SBarry Smith /*
29477a39924SBarry Smith    Logging of MPI activities
29577a39924SBarry Smith */
29677a39924SBarry Smith 
29777a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
298ca161407SBarry Smith (                                                                                \
299ca161407SBarry Smith   MPI_Type_size(type,&PETSC_DUMMY_SIZE), buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \
300ca161407SBarry Smith )
30177a39924SBarry Smith 
30277a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request)        \
303ca161407SBarry Smith (                                                                            \
304ca161407SBarry Smith   PETSC_DUMMY = MPI_Irecv( buf, count,  datatype, source, tag, comm, request),             \
305ca161407SBarry Smith   irecv_ct++, TypeSize(irecv_len,count,datatype),PETSC_DUMMY                            \
306ca161407SBarry Smith )
30715308354SBarry Smith 
30877a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request)          \
309ca161407SBarry Smith (                                                                            \
310ca161407SBarry Smith   PETSC_DUMMY = MPI_Isend( buf, count,  datatype, dest, tag, comm, request),               \
311ca161407SBarry Smith   isend_ct++,   TypeSize(isend_len,count,datatype),PETSC_DUMMY                          \
312ca161407SBarry Smith )
31315308354SBarry Smith 
3140d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests)                                     \
315ca161407SBarry Smith (                                                                                      \
316ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                     \
317ca161407SBarry Smith   irecv_ct += (PLogDouble)(number), irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
318ca161407SBarry Smith )
3190d4b0b6cSBarry Smith 
3200d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests)                                    \
321ca161407SBarry Smith (                                                                                     \
322ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                    \
323ca161407SBarry Smith   isend_ct += (PLogDouble)(number), isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
324ca161407SBarry Smith )
3250d4b0b6cSBarry Smith 
3260d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests)\
327ca161407SBarry Smith (\
328ca161407SBarry Smith   PETSC_DUMMY = MPI_Start( requests),\
329ca161407SBarry Smith   isend_ct++, isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\
330ca161407SBarry Smith )
3310d4b0b6cSBarry Smith 
332ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status)           \
333ca161407SBarry Smith (                                                                            \
334ca161407SBarry Smith   PETSC_DUMMY = MPI_Recv( buf, count,  datatype, source, tag, comm, status),                \
335ca161407SBarry Smith   recv_ct++, TypeSize(recv_len,count,datatype), PETSC_DUMMY                              \
336ca161407SBarry Smith )
33715308354SBarry Smith 
33877a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm)                     \
339ca161407SBarry Smith (                                                                             \
340ca161407SBarry Smith   PETSC_DUMMY = MPI_Send( buf, count,  datatype, dest, tag, comm),                          \
341ca161407SBarry Smith   send_ct++,  TypeSize(send_len,count,datatype),PETSC_DUMMY                              \
342ca161407SBarry Smith )
34377a39924SBarry Smith 
34477a39924SBarry Smith #define MPI_Wait(request, status) \
34577a39924SBarry Smith (                                 \
346e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,   \
34777a39924SBarry Smith   MPI_Wait(request, status)       \
34877a39924SBarry Smith )
34977a39924SBarry Smith 
35077a39924SBarry Smith #define MPI_Waitany(a, b, c, d)     \
35177a39924SBarry Smith (                                   \
352e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++, \
35377a39924SBarry Smith   MPI_Waitany(a, b, c, d)           \
35477a39924SBarry Smith )
35577a39924SBarry Smith 
35677a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
35777a39924SBarry Smith (                                                                \
35847794344SBarry Smith   wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count),        \
35977a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses)       \
36077a39924SBarry Smith )
36177a39924SBarry Smith 
36277a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
363005c665bSBarry Smith     (allreduce_ct++,MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm))
3643914022bSBarry Smith 
3650d4b0b6cSBarry Smith #else
3660d4b0b6cSBarry Smith 
3670d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \
368ca161407SBarry Smith (                                                  \
369ca161407SBarry Smith   MPI_Startall( number, requests)                 \
370ca161407SBarry Smith )
3710d4b0b6cSBarry Smith 
3720d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \
373ca161407SBarry Smith (                                                  \
374ca161407SBarry Smith   MPI_Startall( number, requests)                 \
375ca161407SBarry Smith )
3760d4b0b6cSBarry Smith 
3770d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests) \
378ca161407SBarry Smith (                                         \
379ca161407SBarry Smith   MPI_Start( requests)                   \
380ca161407SBarry Smith )
3810d4b0b6cSBarry Smith 
382bb4af37aSBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! HAVE_BROKEN_RECURSIVE_MACRO */
383614700edSBarry Smith 
384df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
385614700edSBarry Smith 
386614700edSBarry Smith #define PLogFlops(n)
387614700edSBarry Smith 
388df8cf0b5SBarry Smith /*
389df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
390df8cf0b5SBarry Smith */
391614700edSBarry Smith #define MPEBEGIN                  1000
392df8cf0b5SBarry Smith #define PLogMPEBegin()
393df8cf0b5SBarry Smith #define PLogMPEDump(a)
394bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
395bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
396614700edSBarry Smith 
397bf343e40SBarry Smith #define PLogEventActivate(a)   0
398bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
399614700edSBarry Smith 
400bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
401bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
40277c4ece6SBarry Smith 
403b3bbe94bSBarry Smith #define _PLogPLB                        0
404b3bbe94bSBarry Smith #define _PLogPLE                        0
405b3bbe94bSBarry Smith #define _PLogPHC                        0
406b3bbe94bSBarry Smith #define _PLogPHD                        0
40799de4ba8SSatish Balay #define PetscGetFlops(a)                (*(a) = 0.0,0)
408d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
409d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
410005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
411005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
412d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
413d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
414d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
415d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
416d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
417d7a720efSLois Curfman McInnes #define PLogDestroy()
418bf343e40SBarry Smith #define PLogStagePush(a)
419d7a720efSLois Curfman McInnes #define PLogStagePop()
420d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
421d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
422d7a720efSLois Curfman McInnes #define PLogBegin()
423974088aaSSatish Balay #define PLogTraceBegin(file)            0
424bc1211c7SBarry Smith #define PLogSet(lb,le)
425d7a720efSLois Curfman McInnes #define PLogAllBegin()
426d7a720efSLois Curfman McInnes #define PLogDump(char)
427dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
428d7a720efSLois Curfman McInnes #define PLogMPEBegin()
429d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
4307f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
431ce6058e1SBarry Smith 
4323a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */
433ca161407SBarry Smith #define MPI_Startall_irecv( count,number,requests) MPI_Startall( number, requests)
434ce6058e1SBarry Smith 
435ca161407SBarry Smith #define MPI_Startall_isend( count,number,requests) MPI_Startall( number, requests)
436ce6058e1SBarry Smith 
437ca161407SBarry Smith #define MPI_Start_isend(count,  requests) MPI_Start( requests)
438ca161407SBarry Smith 
4393a40ed3dSBarry Smith #endif   /* USE_PETSC_LOG */
4406daaf66cSBarry Smith 
4418b6d568bSLois Curfman McInnes /*MC
44219b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
44319b02663SBarry Smith 
44419b02663SBarry Smith    Input Parameter:
44519b02663SBarry Smith .  f - flop counter
44619b02663SBarry Smith 
44719b02663SBarry Smith    Synopsis:
448682ac3c9SWilliam Gropp    void PLogFlops(int f)
44919b02663SBarry Smith 
45019b02663SBarry Smith    Notes:
45119b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
45219b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
45319b02663SBarry Smith    application code.
45419b02663SBarry Smith 
45519b02663SBarry Smith    PETSc automatically logs library events if the code has been
4563a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG (which is the default), and -log,
45719b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
45819b02663SBarry Smith    intended for logging user flops to supplement this PETSc
45919b02663SBarry Smith    information.
46019b02663SBarry Smith 
46119b02663SBarry Smith     Example of Usage:
46235aab85fSBarry Smith $     int USER_EVENT;
463b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
46419b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
46519b02663SBarry Smith $        [code segment to monitor]
46619b02663SBarry Smith $        PLogFlops(user_flops)
46719b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
46819b02663SBarry Smith 
46958cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops()
47019b02663SBarry Smith 
471edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
47219b02663SBarry Smith M*/
47319b02663SBarry Smith 
47497bb86f7SLois Curfman McInnes 
475d7a720efSLois Curfman McInnes /*MC
47619b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
47797bb86f7SLois Curfman McInnes 
47897bb86f7SLois Curfman McInnes    Input Parameters:
47935aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
48097bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
48197bb86f7SLois Curfman McInnes 
48297bb86f7SLois Curfman McInnes    Synopsis:
483682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
48497bb86f7SLois Curfman McInnes                   PetscObject o4)
48597bb86f7SLois Curfman McInnes 
48697bb86f7SLois Curfman McInnes    Notes:
48797bb86f7SLois Curfman McInnes    You should also register each integer event with the command
48897bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
4893a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
49097bb86f7SLois Curfman McInnes 
49197bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
4923a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
49397bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
49497bb86f7SLois Curfman McInnes    to supplement this PETSc information.
49597bb86f7SLois Curfman McInnes 
49697bb86f7SLois Curfman McInnes     Example of Usage:
49735aab85fSBarry Smith $     int USER_EVENT;
4980eb211faSLois Curfman McInnes $     int user_event_flops;
499b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
50035aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
50197bb86f7SLois Curfman McInnes $        [code segment to monitor]
5020eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
50335aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
50497bb86f7SLois Curfman McInnes 
50597bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
50697bb86f7SLois Curfman McInnes 
50797bb86f7SLois Curfman McInnes .keywords: log, event, begin
50897bb86f7SLois Curfman McInnes M*/
50997bb86f7SLois Curfman McInnes 
510d7a720efSLois Curfman McInnes /*MC
51119b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
51297bb86f7SLois Curfman McInnes 
51397bb86f7SLois Curfman McInnes    Input Parameters:
51435aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
51597bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
51697bb86f7SLois Curfman McInnes 
51797bb86f7SLois Curfman McInnes    Synopsis:
518682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
51997bb86f7SLois Curfman McInnes                 PetscObject o4)
52097bb86f7SLois Curfman McInnes 
52197bb86f7SLois Curfman McInnes    Notes:
522b951964fSBarry Smith    You should also register each additional integer event with the command
52397bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
5243a40ed3dSBarry Smith    -DUSE_PETSC_LOG, which is the default.
52597bb86f7SLois Curfman McInnes 
52697bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
5273a40ed3dSBarry Smith    compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are
52897bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
52997bb86f7SLois Curfman McInnes    to supplement this PETSc information.
53097bb86f7SLois Curfman McInnes 
53197bb86f7SLois Curfman McInnes     Example of Usage:
53235aab85fSBarry Smith $     int USER_EVENT;
5330eb211faSLois Curfman McInnes $     int user_event_flops;
534b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
53597bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
53697bb86f7SLois Curfman McInnes $        [code segment to monitor]
5370eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
53897bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
53997bb86f7SLois Curfman McInnes 
54097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
54197bb86f7SLois Curfman McInnes 
54297bb86f7SLois Curfman McInnes .keywords: log, event, end
54397bb86f7SLois Curfman McInnes M*/
54497bb86f7SLois Curfman McInnes 
545005c665bSBarry Smith /*MC
546005c665bSBarry Smith    PLogEventBarrierBegin - Logs the time in a barrier before an event.
547005c665bSBarry Smith 
548005c665bSBarry Smith    Input Parameters:
549005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
550005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
551005c665bSBarry Smith .  comm - communicator the barrier takes place over
552005c665bSBarry Smith 
553005c665bSBarry Smith    Synopsis:
554005c665bSBarry Smith    void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
555005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
556005c665bSBarry Smith 
557005c665bSBarry Smith    Notes:
558005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
559005c665bSBarry Smith    that requires synchronization.
560005c665bSBarry Smith 
561005c665bSBarry Smith     Example of Usage:
562005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
563005c665bSBarry Smith $       MPI_Allreduce()
564005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
565005c665bSBarry Smith 
566005c665bSBarry Smith    Additional Notes:
567005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
568005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
569005c665bSBarry Smith 
570005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
571005c665bSBarry Smith           PLogEventBarrierEnd()
572005c665bSBarry Smith 
573005c665bSBarry Smith .keywords: log, event, begin, barrier
574005c665bSBarry Smith M*/
575005c665bSBarry Smith 
576005c665bSBarry Smith /*MC
577005c665bSBarry Smith    PLogEventBarrierEnd - Logs the time in a barrier before an event.
578005c665bSBarry Smith 
579005c665bSBarry Smith    Input Parameters:
580005c665bSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
581005c665bSBarry Smith .  o1,o2,o3,o4 - objects associated with the event, or 0
582005c665bSBarry Smith .  comm - communicator the barrier takes place over
583005c665bSBarry Smith 
584005c665bSBarry Smith    Synopsis:
585005c665bSBarry Smith    void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
586005c665bSBarry Smith                   PetscObject o4,MPI_Comm comm)
587005c665bSBarry Smith 
588005c665bSBarry Smith    Notes:
589005c665bSBarry Smith    This is for logging the amount of time spent in a barrier for an event
590005c665bSBarry Smith    that requires synchronization.
591005c665bSBarry Smith 
592005c665bSBarry Smith     Example of Usage:
593005c665bSBarry Smith $     PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm);
594005c665bSBarry Smith $       MPI_Allreduce()
595005c665bSBarry Smith $     PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm);
596005c665bSBarry Smith 
597005c665bSBarry Smith    Additional Notes:
598005c665bSBarry Smith    Synchronization events always come in pairs; for example, VEC_NormBarrier and
599005c665bSBarry Smith    VEC_NormComm = VEC_NormBarrier + 1
600005c665bSBarry Smith 
601005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(),
602005c665bSBarry Smith           PLogEventBarrierBegin()
603005c665bSBarry Smith 
604005c665bSBarry Smith .keywords: log, event, begin, barrier
605005c665bSBarry Smith M*/
606e0937024SBarry Smith 
60797bb86f7SLois Curfman McInnes #endif
60841debaddSBarry Smith 
60977c4ece6SBarry Smith 
61077c4ece6SBarry Smith 
61184cb2905SBarry Smith 
61284cb2905SBarry Smith 
61384cb2905SBarry Smith 
614