xref: /petsc/include/petsclog.h (revision e7592fafdafd2d48ae4a0483061ac14bd099dfe3)
1*e7592fafSBarry Smith /* $Id: petsclog.h,v 1.139 2000/04/09 03:11:53 bsmith Exp bsmith $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
47588ac45SBarry Smith     Defines profile/logging in PETSc.
597bb86f7SLois Curfman McInnes */
697bb86f7SLois Curfman McInnes 
788d459dfSBarry Smith #if !defined(__PLOG_H)
888d459dfSBarry 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/src/plog/src/plog.c,
162ee1dbe0SBarry Smith   petsc/src/plog/src/plogmpe.c, and
1726cd32c0SSatish Balay   petsc/include/finclude/petsclog.h!!!
1897bb86f7SLois Curfman McInnes */
1997bb86f7SLois Curfman McInnes #define MAT_Mult                                0
201ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult                      1
211ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin                       2
221ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd                         3
2391e9ee9fSBarry Smith #define MAT_GetOrdering                         4
247c922b88SBarry Smith #define MAT_MultTranspose                       5
251ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
267c922b88SBarry Smith #define MAT_MultTransposeAdd                    7
271ff317f7SLois Curfman McInnes #define MAT_LUFactor                            8
281ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor                      9
291ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic                    10
301ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic                   11
311ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic              12
321ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic    13
331ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric                     14
341ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric               15
351ff317f7SLois Curfman McInnes #define MAT_Relax                               16
361ff317f7SLois Curfman McInnes #define MAT_Copy                                17
371ff317f7SLois Curfman McInnes #define MAT_Convert                             18
381ff317f7SLois Curfman McInnes #define MAT_Scale                               19
391ff317f7SLois Curfman McInnes #define MAT_ZeroEntries                         20
401ff317f7SLois Curfman McInnes #define MAT_Solve                               21
411ff317f7SLois Curfman McInnes #define MAT_SolveAdd                            22
427c922b88SBarry Smith #define MAT_SolveTranspose                      23
437c922b88SBarry Smith #define MAT_SolveTransposeAdd                   24
441ff317f7SLois Curfman McInnes #define MAT_SetValues                           25
451ff317f7SLois Curfman McInnes #define MAT_ForwardSolve                        26
461ff317f7SLois Curfman McInnes #define MAT_BackwardSolve                       27
471ff317f7SLois Curfman McInnes #define MAT_Load                                28
481ff317f7SLois Curfman McInnes #define MAT_View                                29
491ff317f7SLois Curfman McInnes #define MAT_ILUFactor                           30
503e584e2eSBarry Smith #define MAT_GetColoring                         31
511ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices                      32
521ff317f7SLois Curfman McInnes #define MAT_GetValues                           33
531ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap                     34
54dd8bebb4SSatish Balay #define MAT_GetRow                              35
55ca161407SBarry Smith #define MAT_Partitioning                        36
5697bb86f7SLois Curfman McInnes 
570462333dSBarry Smith #define VEC_ReduceArithmetic                    37
580462333dSBarry Smith #define VEC_ReduceCommunication                 38
59005c665bSBarry Smith #define VEC_ScatterBarrier                      39
60644de43eSSatish Balay #define VEC_ScatterCommunication                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 
1120462333dSBarry Smith #define VEC_ReduceBarrier                       87
1130462333dSBarry Smith #define VEC_ReduceCommOnly                      88
114644de43eSSatish Balay #define VEC_Dot                                 89
1150462333dSBarry Smith 
116682d7d0cSBarry Smith #define TS_Step                                 90
117bf343e40SBarry Smith #define TS_PseudoComputeTimeStep                91
1187c922b88SBarry Smith #define TS_FunctionEval                         92
1197c922b88SBarry Smith #define TS_JacobianEval                         93
12072936c9dSBarry Smith 
12172936c9dSBarry Smith #define Petsc_Barrier                           100
12255206aebSLois Curfman McInnes 
1230513a670SBarry Smith #define EC_SetUp                                105
1240513a670SBarry Smith #define EC_Solve                                106
1250513a670SBarry Smith 
12641debaddSBarry Smith /*
127b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
12877c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
129b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
13041debaddSBarry Smith */
13135aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1324dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
13397bb86f7SLois Curfman McInnes 
13419b02663SBarry Smith /* Global flop counter */
13547794344SBarry Smith extern PLogDouble _TotalFlops;
13619b02663SBarry Smith 
137edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
138e26ad7d8SSatish Balay extern int PLogInfo(void*,const char[],...);
139cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int);
140614700edSBarry Smith extern int PLogInfoActivateClass(int);
14143a90d84SBarry Smith extern int PLogPrintInfo;  /* if 1, indicates PLogInfo() is turned on */
142614700edSBarry Smith 
143aa482453SBarry Smith #if defined(PETSC_USE_LOG)  /* --- Logging is turned on --------------------------------*/
144614700edSBarry Smith 
145da63de55SLois Curfman McInnes /*
146da63de55SLois Curfman McInnes    Flop counting:  We count each arithmetic operation (e.g., addition, multiplication) separately.
147da63de55SLois Curfman McInnes 
148da63de55SLois Curfman McInnes    For the complex numbers version, note that
149da63de55SLois Curfman McInnes        1 complex addition = 2 flops
150da63de55SLois Curfman McInnes        1 complex multiplication = 6 flops,
151da63de55SLois Curfman McInnes    where we define 1 flop as that for a double precision scalar.  We roughly approximate
152da63de55SLois Curfman McInnes    flop counting for complex numbers by multiplying the total flops by 4; this corresponds
153da63de55SLois Curfman McInnes    to the assumption that we're counting mostly additions and multiplications -- and
154da63de55SLois Curfman McInnes    roughly the same number of each.  More accurate counting could be done by distinguishing
155da63de55SLois Curfman McInnes    among the various arithmetic operations.
156da63de55SLois Curfman McInnes  */
157da63de55SLois Curfman McInnes 
158aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
159da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);}
160da63de55SLois Curfman McInnes #else
161a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
162da63de55SLois Curfman McInnes #endif
16377c4ece6SBarry Smith 
164aa482453SBarry Smith #if defined (PETSC_HAVE_MPE)
16577c4ece6SBarry Smith #include "mpe.h"
166614700edSBarry Smith #define MPEBEGIN    1000
167cf256101SBarry Smith extern int PLogMPEBegin(void);
168e26ad7d8SSatish Balay extern int PLogMPEDump(const char[]);
169614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
170614700edSBarry Smith extern int PLogEventMPEActivate(int);
171905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int);
172614700edSBarry Smith #else
173c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0
174c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0
17577c4ece6SBarry Smith #endif
17677c4ece6SBarry Smith 
177614700edSBarry Smith extern int PLogEventActivate(int);
178905e6a2fSBarry Smith extern int PLogEventDeactivate(int);
179614700edSBarry Smith 
1803e584e2eSBarry Smith extern int PLogEventActivateClass(int);
1813e584e2eSBarry Smith extern int PLogEventDeactivateClass(int);
182614700edSBarry Smith 
1830743b949SBarry Smith extern PetscTruth PLogEventFlags[];
184b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
185b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
186b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject);
187b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject);
18877c4ece6SBarry Smith 
1893eda8832SBarry Smith extern int PLogEventDepth[];
1900743b949SBarry Smith 
191aa482453SBarry Smith #if defined(PETSC_HAVE_MPE)
192005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
193005c665bSBarry Smith   { \
194ad20f29eSBarry Smith     if (_PLogPLB && PLogEventFlags[e]) {                           \
195005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
196005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)]) \
197005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,""); \
198005c665bSBarry Smith       MPI_Barrier(cm);                                             \
199005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
200005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)]) \
201005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,""); \
202005c665bSBarry Smith     }                                                                \
203005c665bSBarry Smith     PLogEventBegin(e+1,o1,o2,o3,o4);                                   \
204005c665bSBarry Smith     if (UseMPE && PLogEventMPEFlags[(e)+1])\
205005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
206005c665bSBarry Smith   }
207a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
20856cd22aeSBarry Smith   {  \
2093eda8832SBarry Smith    if (_PLogPLB && PLogEventFlags[(e)] && !PLogEventDepth[e]++) {\
2100743b949SBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
211005c665bSBarry Smith    if (UseMPE && PLogEventMPEFlags[(e)])\
212005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
21377c4ece6SBarry Smith   }
21477c4ece6SBarry Smith #else
215005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
216005c665bSBarry Smith   { \
217005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[(e)]) {                           \
218005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
219005c665bSBarry Smith       MPI_Barrier(cm);                                             \
220005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
221005c665bSBarry Smith     }                                                                \
222005c665bSBarry Smith     PLogEventBegin((e)+1,o1,o2,o3,o4);                                   \
223005c665bSBarry Smith   }
224a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
22556cd22aeSBarry Smith   {  \
2263eda8832SBarry Smith    if (_PLogPLB && PLogEventFlags[(e)] && !PLogEventDepth[e]++) {\
2270743b949SBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
22877c4ece6SBarry Smith   }
22977c4ece6SBarry Smith #endif
23077c4ece6SBarry Smith 
231aa482453SBarry Smith #if defined(PETSC_HAVE_MPE)
232005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
233644de43eSSatish Balay   if (_PLogPLE && PLogEventFlags[(e)+1]) \
234005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
235005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)+1])\
236005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\
237005c665bSBarry Smith   }
23877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
2393eda8832SBarry Smith   if (_PLogPLE && PLogEventFlags[(e)] && !--PLogEventDepth[e]) {\
2403eda8832SBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
241005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)])\
242005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
243a1b5d808SSatish Balay   }
24477c4ece6SBarry Smith #else
245005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
2460743b949SBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) {\
24705f071e2SSatish Balay     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));} \
248005c665bSBarry Smith   }
24977c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
2503eda8832SBarry Smith   if (_PLogPLE && PLogEventFlags[(e)] && !--PLogEventDepth[e]) {\
2513eda8832SBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
252a1b5d808SSatish Balay   }
25377c4ece6SBarry Smith #endif
25477c4ece6SBarry Smith 
2553a40ed3dSBarry Smith #define PLogObjectParent(p,c)       if (c) {PetscValidHeader((PetscObject)(c)); \
2563a40ed3dSBarry Smith                                      PetscValidHeader((PetscObject)(p));\
257e24b481bSBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject)(p);\
258e24b481bSBarry Smith 				     ((PetscObject)(c))->parentid = ((PetscObject)p)->id;}
25977c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for (_i=0; _i<n; _i++) \
26077c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
261b3bbe94bSBarry Smith #define PLogObjectCreate(h)         {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);}
262b3bbe94bSBarry Smith #define PLogObjectDestroy(h)        {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);}
26377c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
26477c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
265e26ad7d8SSatish Balay extern int  PLogObjectState(PetscObject,const char[],...);
266cf256101SBarry Smith extern int  PLogDestroy(void);
26777c4ece6SBarry Smith extern int  PLogStagePush(int);
2681d508c8cSSatish Balay extern int  PLogStagePop(void);
269e26ad7d8SSatish Balay extern int  PLogStageRegister(int,const char[]);
270e26ad7d8SSatish Balay extern int  PLogPrintSummary(MPI_Comm,const char[]);
2711d508c8cSSatish Balay extern int  PLogBegin(void);
272bc1211c7SBarry Smith extern int  PLogTraceBegin(FILE *);
2731d508c8cSSatish Balay extern int  PLogAllBegin(void);
274bc1211c7SBarry Smith extern int  PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
275bc1211c7SBarry Smith                     int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
276e26ad7d8SSatish Balay extern int  PLogDump(const char[]);
277e26ad7d8SSatish Balay extern int  PLogEventRegister(int*,const char[],const char[]);
27899de4ba8SSatish Balay extern int  PetscGetFlops(PLogDouble*);
27977c4ece6SBarry Smith 
28047794344SBarry Smith extern PLogDouble irecv_ct,isend_ct,wait_ct,wait_any_ct,recv_ct,send_ct;
28147794344SBarry Smith extern PLogDouble irecv_len,isend_len,recv_len,send_len;
28247794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
283ca161407SBarry Smith extern int        PETSC_DUMMY,PETSC_DUMMY_SIZE;
284ca161407SBarry Smith 
285ce85283eSBarry Smith /*
28684cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
287ce85283eSBarry Smith    uses macros to defined the MPI operations.
28815308354SBarry Smith 
28915308354SBarry Smith      It does not work correctly from HP-UX because it processes the
290bb4af37aSBarry Smith    macros in a way that sometimes it double counts, hence
291aa482453SBarry Smith    PETSC_HAVE_BROKEN_RECURSIVE_MACRO
2927c1e34a4SSatish Balay 
2937c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
294ce85283eSBarry Smith */
29567b8f57cSSatish Balay #if !defined(USING_MPIUNI) && !defined(PETSC_HAVE_BROKEN_RECURSIVE_MACRO) && !defined (PETSC_HAVE_MPI_MISSING_TYPESIZE)
29677a39924SBarry Smith /*
29777a39924SBarry Smith    Logging of MPI activities
29877a39924SBarry Smith */
29977a39924SBarry Smith 
30077a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
301ca161407SBarry Smith (\
302ca161407SBarry Smith   MPI_Type_size(type,&PETSC_DUMMY_SIZE),buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \
303ca161407SBarry Smith )
30477a39924SBarry Smith 
30577a39924SBarry Smith #define MPI_Irecv(buf,count, datatype,source,tag,comm,request)        \
306ca161407SBarry Smith (\
307ca161407SBarry Smith   PETSC_DUMMY = MPI_Irecv(buf,count, datatype,source,tag,comm,request),            \
308ca161407SBarry Smith   irecv_ct++,TypeSize(irecv_len,count,datatype),PETSC_DUMMY                            \
309ca161407SBarry Smith )
31015308354SBarry Smith 
31177a39924SBarry Smith #define MPI_Isend(buf,count, datatype,dest,tag,comm,request)          \
312ca161407SBarry Smith (\
313ca161407SBarry Smith   PETSC_DUMMY = MPI_Isend(buf,count, datatype,dest,tag,comm,request),              \
314ca161407SBarry Smith   isend_ct++,  TypeSize(isend_len,count,datatype),PETSC_DUMMY                          \
315ca161407SBarry Smith )
31615308354SBarry Smith 
3170d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests)                                     \
318ca161407SBarry Smith (\
319ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall(number,requests),                                                    \
320ca161407SBarry Smith   irecv_ct += (PLogDouble)(number),irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
321ca161407SBarry Smith )
3220d4b0b6cSBarry Smith 
3230d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests)                                    \
324ca161407SBarry Smith (\
325ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall(number,requests),                                                   \
326ca161407SBarry Smith   isend_ct += (PLogDouble)(number),isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
327ca161407SBarry Smith )
3280d4b0b6cSBarry Smith 
3290d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests)\
330ca161407SBarry Smith (\
331ca161407SBarry Smith   PETSC_DUMMY = MPI_Start(requests),\
332ca161407SBarry Smith   isend_ct++,isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\
333ca161407SBarry Smith )
3340d4b0b6cSBarry Smith 
335ce85283eSBarry Smith #define MPI_Recv(buf,count, datatype,source,tag,comm,status)           \
336ca161407SBarry Smith (\
337ca161407SBarry Smith   PETSC_DUMMY = MPI_Recv(buf,count, datatype,source,tag,comm,status),               \
338ca161407SBarry Smith   recv_ct++,TypeSize(recv_len,count,datatype),PETSC_DUMMY                              \
339ca161407SBarry Smith )
34015308354SBarry Smith 
34177a39924SBarry Smith #define MPI_Send(buf,count, datatype,dest,tag,comm)                     \
342ca161407SBarry Smith (\
343ca161407SBarry Smith   PETSC_DUMMY = MPI_Send(buf,count, datatype,dest,tag,comm),                         \
344ca161407SBarry Smith   send_ct++, TypeSize(send_len,count,datatype),PETSC_DUMMY                              \
345ca161407SBarry Smith )
34677a39924SBarry Smith 
34777a39924SBarry Smith #define MPI_Wait(request,status) \
34877a39924SBarry Smith (\
349e0937024SBarry Smith   wait_ct++,sum_of_waits_ct++,  \
35077a39924SBarry Smith   MPI_Wait(request,status)       \
35177a39924SBarry Smith )
35277a39924SBarry Smith 
35377a39924SBarry Smith #define MPI_Waitany(a,b,c,d)     \
35477a39924SBarry Smith (\
355e0937024SBarry Smith   wait_any_ct++,sum_of_waits_ct++,\
35677a39924SBarry Smith   MPI_Waitany(a,b,c,d)           \
35777a39924SBarry Smith )
35877a39924SBarry Smith 
35977a39924SBarry Smith #define MPI_Waitall(count,array_of_requests,array_of_statuses) \
36077a39924SBarry Smith (\
36147794344SBarry Smith   wait_all_ct++,sum_of_waits_ct += (PLogDouble) (count),       \
36277a39924SBarry Smith   MPI_Waitall(count,array_of_requests,array_of_statuses)       \
36377a39924SBarry Smith )
36477a39924SBarry Smith 
36577a39924SBarry Smith #define MPI_Allreduce(sendbuf, recvbuf,count,datatype,op,comm) \
3660743b949SBarry Smith (\
3670743b949SBarry Smith   allreduce_ct++,MPI_Allreduce(sendbuf,recvbuf,count,datatype,op,comm)\
3680743b949SBarry Smith )
3693914022bSBarry Smith 
3700d4b0b6cSBarry Smith #else
3710d4b0b6cSBarry Smith 
3720d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests) \
373ca161407SBarry Smith (\
374ca161407SBarry Smith   MPI_Startall(number,requests)                 \
375ca161407SBarry Smith )
3760d4b0b6cSBarry Smith 
3770d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests) \
378ca161407SBarry Smith (\
379ca161407SBarry Smith   MPI_Startall(number,requests)                 \
380ca161407SBarry Smith )
3810d4b0b6cSBarry Smith 
3820d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \
383ca161407SBarry Smith (\
384ca161407SBarry Smith   MPI_Start(requests)                   \
385ca161407SBarry Smith )
3860d4b0b6cSBarry Smith 
387aa482453SBarry Smith #endif /* !USING_MPIUNI && ! PETSC_HAVE_BROKEN_RECURSIVE_MACRO */
388614700edSBarry Smith 
389df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
390614700edSBarry Smith 
391614700edSBarry Smith #define PLogFlops(n)
392614700edSBarry Smith 
393df8cf0b5SBarry Smith /*
394df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
395df8cf0b5SBarry Smith */
396614700edSBarry Smith #define MPEBEGIN                  1000
397df8cf0b5SBarry Smith #define PLogMPEBegin()
3987c200033SBarry Smith #define PLogMPEDump(a)            0
399bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
400bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
401614700edSBarry Smith 
402bf343e40SBarry Smith #define PLogEventActivate(a)   0
403bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
404614700edSBarry Smith 
405bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
406bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
40777c4ece6SBarry Smith 
408b3bbe94bSBarry Smith #define _PLogPLB                        0
409b3bbe94bSBarry Smith #define _PLogPLE                        0
410b3bbe94bSBarry Smith #define _PLogPHC                        0
411b3bbe94bSBarry Smith #define _PLogPHD                        0
41299de4ba8SSatish Balay #define PetscGetFlops(a)                (*(a) = 0.0,0)
413d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
414d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
415005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
416005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
417d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
418d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
419d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
420d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
421d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
4220f5bd95cSBarry Smith #define PLogDestroy()                   0
4230f5bd95cSBarry Smith #define PLogStagePush(a)                0
4240f5bd95cSBarry Smith #define PLogStagePop()                  0
4250f5bd95cSBarry Smith #define PLogStageRegister(a,b)          0
4267c200033SBarry Smith #define PLogPrintSummary(comm,file)     0
4270f5bd95cSBarry Smith #define PLogBegin()                     0
428974088aaSSatish Balay #define PLogTraceBegin(file)            0
4290f5bd95cSBarry Smith #define PLogSet(lb,le)                  0
4300f5bd95cSBarry Smith #define PLogAllBegin()                  0
4310f5bd95cSBarry Smith #define PLogDump(c)                     0
432dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
433e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...);
434ce6058e1SBarry Smith 
435aa482453SBarry Smith /* If PETSC_USE_LOG is NOT defined, these still need to be! */
436ca161407SBarry Smith #define MPI_Startall_irecv(count,number,requests) MPI_Startall(number,requests)
437ce6058e1SBarry Smith 
438ca161407SBarry Smith #define MPI_Startall_isend(count,number,requests) MPI_Startall(number,requests)
439ce6058e1SBarry Smith 
440ca161407SBarry Smith #define MPI_Start_isend(count,requests) MPI_Start(requests)
441ca161407SBarry Smith 
442aa482453SBarry Smith #endif   /* PETSC_USE_LOG */
4436daaf66cSBarry Smith 
444*e7592fafSBarry Smith #define PreLoadBegin(flag,name) {PetscTruth PreLoading = flag; int PreLoadMax,PreLoadIt,__ierr;\
445*e7592fafSBarry Smith                                  __ierr = OptionsGetLogical(PETSC_NULL,"-preload",&PreLoading,PETSC_NULL);CHKERRQ(__ierr);\
446*e7592fafSBarry Smith                                  PreLoadMax = (int)(PreLoading);\
447*e7592fafSBarry Smith                                  for (PreLoadIt=0; PreLoadIt<=PreLoadMax; PreLoadIt++) {\
448*e7592fafSBarry Smith                                    __ierr = PetscBarrier(PETSC_NULL);CHKERRQ(__ierr);\
449*e7592fafSBarry Smith                                    __ierr = PLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\
450*e7592fafSBarry Smith                                    __ierr = PLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);
451*e7592fafSBarry Smith #define PreLoadEnd()               __ierr = PLogStagePop();CHKERRQ(__ierr);PreLoading = PETSC_FALSE;}}
452*e7592fafSBarry Smith #define PreLoadStage(name)         __ierr = PLogStagePop();CHKERRQ(__ierr);\
453*e7592fafSBarry Smith                                    __ierr = PLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\
454*e7592fafSBarry Smith                                    __ierr = PLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);
455e0937024SBarry Smith 
45697bb86f7SLois Curfman McInnes #endif
45741debaddSBarry Smith 
45877c4ece6SBarry Smith 
45977c4ece6SBarry Smith 
46084cb2905SBarry Smith 
46184cb2905SBarry Smith 
46284cb2905SBarry Smith 
463