1*05f071e2SSatish Balay /* $Id: petsclog.h,v 1.137 2000/02/24 22:23:48 balay Exp balay $ */ 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 1890743b949SBarry Smith extern PetscTruth 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 { \ 2090743b949SBarry Smith if (_PLogPLB && PLogEventFlags[(e)] && !PLogEventDepth[e]) {\ 2100743b949SBarry Smith PLogEventDepth[e] = PETSC_TRUE; \ 2110743b949SBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 212005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 213005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 21477c4ece6SBarry Smith } 21577c4ece6SBarry Smith #else 216005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 217005c665bSBarry Smith { \ 218005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) { \ 219005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 220005c665bSBarry Smith MPI_Barrier(cm); \ 221005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 222005c665bSBarry Smith } \ 223005c665bSBarry Smith PLogEventBegin((e)+1,o1,o2,o3,o4); \ 224005c665bSBarry Smith } 225a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 22656cd22aeSBarry Smith { \ 2270743b949SBarry Smith if (_PLogPLB && PLogEventFlags[(e)] && !PLogEventDepth[e]) {\ 2280743b949SBarry Smith PLogEventDepth[e] = PETSC_TRUE; \ 2290743b949SBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 23077c4ece6SBarry Smith } 23177c4ece6SBarry Smith #endif 23277c4ece6SBarry Smith 233aa482453SBarry Smith #if defined(PETSC_HAVE_MPE) 234005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 235644de43eSSatish Balay if (_PLogPLE && PLogEventFlags[(e)+1]) \ 236005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 237005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 238005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\ 239005c665bSBarry Smith } 24077c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 2410743b949SBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) {\ 242005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 2430743b949SBarry Smith PLogEventDepth[e] = PETSC_FALSE; }\ 244005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 245005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\ 246a1b5d808SSatish Balay } 24777c4ece6SBarry Smith #else 248005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 2490743b949SBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) {\ 250*05f071e2SSatish Balay (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));} \ 251005c665bSBarry Smith } 25277c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 2530743b949SBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) {\ 254005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 2550743b949SBarry Smith PLogEventDepth[e] = PETSC_FALSE; }\ 256a1b5d808SSatish Balay } 25777c4ece6SBarry Smith #endif 25877c4ece6SBarry Smith 2593a40ed3dSBarry Smith #define PLogObjectParent(p,c) if (c) {PetscValidHeader((PetscObject)(c)); \ 2603a40ed3dSBarry Smith PetscValidHeader((PetscObject)(p));\ 261e24b481bSBarry Smith ((PetscObject)(c))->parent = (PetscObject)(p);\ 262e24b481bSBarry Smith ((PetscObject)(c))->parentid = ((PetscObject)p)->id;} 26377c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for (_i=0; _i<n; _i++) \ 26477c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 265b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 266b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 26777c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 26877c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 269e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...); 270cf256101SBarry Smith extern int PLogDestroy(void); 27177c4ece6SBarry Smith extern int PLogStagePush(int); 2721d508c8cSSatish Balay extern int PLogStagePop(void); 273e26ad7d8SSatish Balay extern int PLogStageRegister(int,const char[]); 274e26ad7d8SSatish Balay extern int PLogPrintSummary(MPI_Comm,const char[]); 2751d508c8cSSatish Balay extern int PLogBegin(void); 276bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 2771d508c8cSSatish Balay extern int PLogAllBegin(void); 278bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 279bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 280e26ad7d8SSatish Balay extern int PLogDump(const char[]); 281e26ad7d8SSatish Balay extern int PLogEventRegister(int*,const char[],const char[]); 28299de4ba8SSatish Balay extern int PetscGetFlops(PLogDouble*); 28377c4ece6SBarry Smith 28447794344SBarry Smith extern PLogDouble irecv_ct,isend_ct,wait_ct,wait_any_ct,recv_ct,send_ct; 28547794344SBarry Smith extern PLogDouble irecv_len,isend_len,recv_len,send_len; 28647794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 287ca161407SBarry Smith extern int PETSC_DUMMY,PETSC_DUMMY_SIZE; 288ca161407SBarry Smith 289ce85283eSBarry Smith /* 29084cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 291ce85283eSBarry Smith uses macros to defined the MPI operations. 29215308354SBarry Smith 29315308354SBarry Smith It does not work correctly from HP-UX because it processes the 294bb4af37aSBarry Smith macros in a way that sometimes it double counts, hence 295aa482453SBarry Smith PETSC_HAVE_BROKEN_RECURSIVE_MACRO 2967c1e34a4SSatish Balay 2977c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 298ce85283eSBarry Smith */ 29967b8f57cSSatish Balay #if !defined(USING_MPIUNI) && !defined(PETSC_HAVE_BROKEN_RECURSIVE_MACRO) && !defined (PETSC_HAVE_MPI_MISSING_TYPESIZE) 30077a39924SBarry Smith /* 30177a39924SBarry Smith Logging of MPI activities 30277a39924SBarry Smith */ 30377a39924SBarry Smith 30477a39924SBarry Smith #define TypeSize(buff,count,type) \ 305ca161407SBarry Smith (\ 306ca161407SBarry Smith MPI_Type_size(type,&PETSC_DUMMY_SIZE),buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \ 307ca161407SBarry Smith ) 30877a39924SBarry Smith 30977a39924SBarry Smith #define MPI_Irecv(buf,count, datatype,source,tag,comm,request) \ 310ca161407SBarry Smith (\ 311ca161407SBarry Smith PETSC_DUMMY = MPI_Irecv(buf,count, datatype,source,tag,comm,request), \ 312ca161407SBarry Smith irecv_ct++,TypeSize(irecv_len,count,datatype),PETSC_DUMMY \ 313ca161407SBarry Smith ) 31415308354SBarry Smith 31577a39924SBarry Smith #define MPI_Isend(buf,count, datatype,dest,tag,comm,request) \ 316ca161407SBarry Smith (\ 317ca161407SBarry Smith PETSC_DUMMY = MPI_Isend(buf,count, datatype,dest,tag,comm,request), \ 318ca161407SBarry Smith isend_ct++, TypeSize(isend_len,count,datatype),PETSC_DUMMY \ 319ca161407SBarry Smith ) 32015308354SBarry Smith 3210d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests) \ 322ca161407SBarry Smith (\ 323ca161407SBarry Smith PETSC_DUMMY = MPI_Startall(number,requests), \ 324ca161407SBarry Smith irecv_ct += (PLogDouble)(number),irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 325ca161407SBarry Smith ) 3260d4b0b6cSBarry Smith 3270d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests) \ 328ca161407SBarry Smith (\ 329ca161407SBarry Smith PETSC_DUMMY = MPI_Startall(number,requests), \ 330ca161407SBarry Smith isend_ct += (PLogDouble)(number),isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 331ca161407SBarry Smith ) 3320d4b0b6cSBarry Smith 3330d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests)\ 334ca161407SBarry Smith (\ 335ca161407SBarry Smith PETSC_DUMMY = MPI_Start(requests),\ 336ca161407SBarry Smith isend_ct++,isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\ 337ca161407SBarry Smith ) 3380d4b0b6cSBarry Smith 339ce85283eSBarry Smith #define MPI_Recv(buf,count, datatype,source,tag,comm,status) \ 340ca161407SBarry Smith (\ 341ca161407SBarry Smith PETSC_DUMMY = MPI_Recv(buf,count, datatype,source,tag,comm,status), \ 342ca161407SBarry Smith recv_ct++,TypeSize(recv_len,count,datatype),PETSC_DUMMY \ 343ca161407SBarry Smith ) 34415308354SBarry Smith 34577a39924SBarry Smith #define MPI_Send(buf,count, datatype,dest,tag,comm) \ 346ca161407SBarry Smith (\ 347ca161407SBarry Smith PETSC_DUMMY = MPI_Send(buf,count, datatype,dest,tag,comm), \ 348ca161407SBarry Smith send_ct++, TypeSize(send_len,count,datatype),PETSC_DUMMY \ 349ca161407SBarry Smith ) 35077a39924SBarry Smith 35177a39924SBarry Smith #define MPI_Wait(request,status) \ 35277a39924SBarry Smith (\ 353e0937024SBarry Smith wait_ct++,sum_of_waits_ct++, \ 35477a39924SBarry Smith MPI_Wait(request,status) \ 35577a39924SBarry Smith ) 35677a39924SBarry Smith 35777a39924SBarry Smith #define MPI_Waitany(a,b,c,d) \ 35877a39924SBarry Smith (\ 359e0937024SBarry Smith wait_any_ct++,sum_of_waits_ct++,\ 36077a39924SBarry Smith MPI_Waitany(a,b,c,d) \ 36177a39924SBarry Smith ) 36277a39924SBarry Smith 36377a39924SBarry Smith #define MPI_Waitall(count,array_of_requests,array_of_statuses) \ 36477a39924SBarry Smith (\ 36547794344SBarry Smith wait_all_ct++,sum_of_waits_ct += (PLogDouble) (count), \ 36677a39924SBarry Smith MPI_Waitall(count,array_of_requests,array_of_statuses) \ 36777a39924SBarry Smith ) 36877a39924SBarry Smith 36977a39924SBarry Smith #define MPI_Allreduce(sendbuf, recvbuf,count,datatype,op,comm) \ 3700743b949SBarry Smith (\ 3710743b949SBarry Smith allreduce_ct++,MPI_Allreduce(sendbuf,recvbuf,count,datatype,op,comm)\ 3720743b949SBarry Smith ) 3733914022bSBarry Smith 3740d4b0b6cSBarry Smith #else 3750d4b0b6cSBarry Smith 3760d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests) \ 377ca161407SBarry Smith (\ 378ca161407SBarry Smith MPI_Startall(number,requests) \ 379ca161407SBarry Smith ) 3800d4b0b6cSBarry Smith 3810d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests) \ 382ca161407SBarry Smith (\ 383ca161407SBarry Smith MPI_Startall(number,requests) \ 384ca161407SBarry Smith ) 3850d4b0b6cSBarry Smith 3860d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 387ca161407SBarry Smith (\ 388ca161407SBarry Smith MPI_Start(requests) \ 389ca161407SBarry Smith ) 3900d4b0b6cSBarry Smith 391aa482453SBarry Smith #endif /* !USING_MPIUNI && ! PETSC_HAVE_BROKEN_RECURSIVE_MACRO */ 392614700edSBarry Smith 393df8cf0b5SBarry Smith #else /* ---Logging is turned off --------------------------------------------*/ 394614700edSBarry Smith 395614700edSBarry Smith #define PLogFlops(n) 396614700edSBarry Smith 397df8cf0b5SBarry Smith /* 398df8cf0b5SBarry Smith With logging turned off, then MPE has to be turned off 399df8cf0b5SBarry Smith */ 400614700edSBarry Smith #define MPEBEGIN 1000 401df8cf0b5SBarry Smith #define PLogMPEBegin() 4027c200033SBarry Smith #define PLogMPEDump(a) 0 403bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 404bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 405614700edSBarry Smith 406bf343e40SBarry Smith #define PLogEventActivate(a) 0 407bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 408614700edSBarry Smith 409bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 410bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 41177c4ece6SBarry Smith 412b3bbe94bSBarry Smith #define _PLogPLB 0 413b3bbe94bSBarry Smith #define _PLogPLE 0 414b3bbe94bSBarry Smith #define _PLogPHC 0 415b3bbe94bSBarry Smith #define _PLogPHD 0 41699de4ba8SSatish Balay #define PetscGetFlops(a) (*(a) = 0.0,0) 417d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 418d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 419005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 420005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) 421d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 422d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 423d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 424d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 425d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 4260f5bd95cSBarry Smith #define PLogDestroy() 0 4270f5bd95cSBarry Smith #define PLogStagePush(a) 0 4280f5bd95cSBarry Smith #define PLogStagePop() 0 4290f5bd95cSBarry Smith #define PLogStageRegister(a,b) 0 4307c200033SBarry Smith #define PLogPrintSummary(comm,file) 0 4310f5bd95cSBarry Smith #define PLogBegin() 0 432974088aaSSatish Balay #define PLogTraceBegin(file) 0 4330f5bd95cSBarry Smith #define PLogSet(lb,le) 0 4340f5bd95cSBarry Smith #define PLogAllBegin() 0 4350f5bd95cSBarry Smith #define PLogDump(c) 0 436dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 437e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...); 438ce6058e1SBarry Smith 439aa482453SBarry Smith /* If PETSC_USE_LOG is NOT defined, these still need to be! */ 440ca161407SBarry Smith #define MPI_Startall_irecv(count,number,requests) MPI_Startall(number,requests) 441ce6058e1SBarry Smith 442ca161407SBarry Smith #define MPI_Startall_isend(count,number,requests) MPI_Startall(number,requests) 443ce6058e1SBarry Smith 444ca161407SBarry Smith #define MPI_Start_isend(count,requests) MPI_Start(requests) 445ca161407SBarry Smith 446aa482453SBarry Smith #endif /* PETSC_USE_LOG */ 4476daaf66cSBarry Smith 448e0937024SBarry Smith 44997bb86f7SLois Curfman McInnes #endif 45041debaddSBarry Smith 45177c4ece6SBarry Smith 45277c4ece6SBarry Smith 45384cb2905SBarry Smith 45484cb2905SBarry Smith 45584cb2905SBarry Smith 456