1*91e9ee9fSBarry Smith /* $Id: petsclog.h,v 1.126 1999/03/01 04:59:18 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/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 25*91e9ee9fSBarry Smith #define MAT_GetOrdering 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 590462333dSBarry Smith #define VEC_ReduceArithmetic 37 600462333dSBarry Smith #define VEC_ReduceCommunication 38 61005c665bSBarry Smith #define VEC_ScatterBarrier 39 624dcbc457SBarry Smith #define VEC_Dot 40 634dcbc457SBarry Smith #define VEC_Norm 41 644dcbc457SBarry Smith #define VEC_Max 42 654dcbc457SBarry Smith #define VEC_Min 43 664dcbc457SBarry Smith #define VEC_TDot 44 674dcbc457SBarry Smith #define VEC_Scale 45 684dcbc457SBarry Smith #define VEC_Copy 46 694dcbc457SBarry Smith #define VEC_Set 47 704dcbc457SBarry Smith #define VEC_AXPY 48 714dcbc457SBarry Smith #define VEC_AYPX 49 724dcbc457SBarry Smith #define VEC_Swap 50 734dcbc457SBarry Smith #define VEC_WAXPY 51 744dcbc457SBarry Smith #define VEC_AssemblyBegin 52 754dcbc457SBarry Smith #define VEC_AssemblyEnd 53 764dcbc457SBarry Smith #define VEC_MTDot 54 774dcbc457SBarry Smith #define VEC_MDot 55 784dcbc457SBarry Smith #define VEC_MAXPY 56 794dcbc457SBarry Smith #define VEC_PMult 57 804dcbc457SBarry Smith #define VEC_SetValues 58 814dcbc457SBarry Smith #define VEC_Load 59 824dcbc457SBarry Smith #define VEC_View 60 834dcbc457SBarry Smith #define VEC_ScatterBegin 61 844dcbc457SBarry Smith #define VEC_ScatterEnd 62 85bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 8697bb86f7SLois Curfman McInnes 87005c665bSBarry Smith #define VEC_NormBarrier 64 88005c665bSBarry Smith #define VEC_NormComm 65 89005c665bSBarry Smith #define VEC_DotBarrier 66 90005c665bSBarry Smith #define VEC_DotComm 67 91005c665bSBarry Smith #define VEC_MDotBarrier 68 92005c665bSBarry Smith #define VEC_MDotComm 69 93005c665bSBarry Smith 944dcbc457SBarry Smith #define SLES_Solve 70 954dcbc457SBarry Smith #define SLES_SetUp 71 9697bb86f7SLois Curfman McInnes 974dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 9897bb86f7SLois Curfman McInnes 991bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices 74 1004dcbc457SBarry Smith #define PC_SetUp 75 10136058207SBarry Smith #define PC_SetUpOnBlocks 76 10232284f49SSatish Balay #define PC_Apply 77 103614700edSBarry Smith #define PC_ApplySymmetricLeft 78 104614700edSBarry Smith #define PC_ApplySymmetricRight 79 1054dcbc457SBarry Smith 1064dcbc457SBarry Smith #define SNES_Solve 80 1074dcbc457SBarry Smith #define SNES_LineSearch 81 1084dcbc457SBarry Smith #define SNES_FunctionEval 82 1094dcbc457SBarry Smith #define SNES_JacobianEval 83 1104dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 1114dcbc457SBarry Smith #define SNES_GradientEval 85 1124dcbc457SBarry Smith #define SNES_HessianEval 86 1134dcbc457SBarry Smith 1140462333dSBarry Smith #define VEC_ReduceBarrier 87 1150462333dSBarry Smith #define VEC_ReduceCommOnly 88 1160462333dSBarry Smith 117682d7d0cSBarry Smith #define TS_Step 90 118bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 11972936c9dSBarry Smith 12072936c9dSBarry Smith #define Petsc_Barrier 100 12155206aebSLois Curfman McInnes 1220513a670SBarry Smith #define EC_SetUp 105 1230513a670SBarry Smith #define EC_Solve 106 1240513a670SBarry Smith 12555206aebSLois Curfman McInnes #define DFVec_RefineVector 110 12655206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 12755206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 12855206aebSLois Curfman McInnes #define DFVec_DrawContours 113 12955206aebSLois Curfman McInnes 13041debaddSBarry Smith /* 131b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 13277c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 133b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 13441debaddSBarry Smith */ 13535aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1364dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 13797bb86f7SLois Curfman McInnes 13819b02663SBarry Smith /* Global flop counter */ 13947794344SBarry Smith extern PLogDouble _TotalFlops; 14019b02663SBarry Smith 141edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 142e26ad7d8SSatish Balay extern int PLogInfo(void*,const char[],...); 143cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 144614700edSBarry Smith extern int PLogInfoActivateClass(int); 14543a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 146614700edSBarry Smith 1473a40ed3dSBarry Smith #if defined(USE_PETSC_LOG) /* --- Logging is turned on --------------------------------*/ 148614700edSBarry Smith 149da63de55SLois Curfman McInnes /* 150da63de55SLois Curfman McInnes Flop counting: We count each arithmetic operation (e.g., addition, multiplication) separately. 151da63de55SLois Curfman McInnes 152da63de55SLois Curfman McInnes For the complex numbers version, note that 153da63de55SLois Curfman McInnes 1 complex addition = 2 flops 154da63de55SLois Curfman McInnes 1 complex multiplication = 6 flops, 155da63de55SLois Curfman McInnes where we define 1 flop as that for a double precision scalar. We roughly approximate 156da63de55SLois Curfman McInnes flop counting for complex numbers by multiplying the total flops by 4; this corresponds 157da63de55SLois Curfman McInnes to the assumption that we're counting mostly additions and multiplications -- and 158da63de55SLois Curfman McInnes roughly the same number of each. More accurate counting could be done by distinguishing 159da63de55SLois Curfman McInnes among the various arithmetic operations. 160da63de55SLois Curfman McInnes */ 161da63de55SLois Curfman McInnes 1623a40ed3dSBarry Smith #if defined(USE_PETSC_COMPLEX) 163da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);} 164da63de55SLois Curfman McInnes #else 165a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 166da63de55SLois Curfman McInnes #endif 16777c4ece6SBarry Smith 16877c4ece6SBarry Smith #if defined (HAVE_MPE) 16977c4ece6SBarry Smith #include "mpe.h" 170614700edSBarry Smith #define MPEBEGIN 1000 171cf256101SBarry Smith extern int PLogMPEBegin(void); 172e26ad7d8SSatish Balay extern int PLogMPEDump(const char[]); 173614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 174614700edSBarry Smith extern int PLogEventMPEActivate(int); 175905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 176614700edSBarry Smith #else 177c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 178c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 17977c4ece6SBarry Smith #endif 18077c4ece6SBarry Smith 181614700edSBarry Smith extern int PLogEventActivate(int); 182905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 183614700edSBarry Smith 1843e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1853e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 186614700edSBarry Smith 187614700edSBarry Smith extern int PLogEventFlags[]; 188b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 189b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 190b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 191b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 19277c4ece6SBarry Smith 19377c4ece6SBarry Smith #if defined(HAVE_MPE) 194005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 195005c665bSBarry Smith { \ 196005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) { \ 197005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 198005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 199005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 200005c665bSBarry Smith MPI_Barrier(cm); \ 201005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 202005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 203005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 204005c665bSBarry Smith } \ 205005c665bSBarry Smith PLogEventBegin(e+1,o1,o2,o3,o4); \ 206005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 207005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 208005c665bSBarry Smith } 209a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 21056cd22aeSBarry Smith { \ 211005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 212005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 213005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 214005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 21577c4ece6SBarry Smith } 21677c4ece6SBarry Smith #else 217005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 218005c665bSBarry Smith { \ 219005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) { \ 220005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 221005c665bSBarry Smith MPI_Barrier(cm); \ 222005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 223005c665bSBarry Smith } \ 224005c665bSBarry Smith PLogEventBegin((e)+1,o1,o2,o3,o4); \ 225005c665bSBarry Smith } 226a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 22756cd22aeSBarry Smith { \ 228005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 229005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 23077c4ece6SBarry Smith } 23177c4ece6SBarry Smith #endif 23277c4ece6SBarry Smith 23377c4ece6SBarry Smith #if defined(HAVE_MPE) 234005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 235005c665bSBarry Smith 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) {\ 241005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 242005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 243005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 244005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\ 245a1b5d808SSatish Balay } 24677c4ece6SBarry Smith #else 247005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 248005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) \ 249005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 250005c665bSBarry Smith } 25177c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 252005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 253005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 254a1b5d808SSatish Balay } 25577c4ece6SBarry Smith #endif 25677c4ece6SBarry Smith 25777c4ece6SBarry Smith 2583a40ed3dSBarry Smith #define PLogObjectParent(p,c) if (c) {PetscValidHeader((PetscObject)(c)); \ 2593a40ed3dSBarry Smith PetscValidHeader((PetscObject)(p));\ 260e24b481bSBarry Smith ((PetscObject)(c))->parent = (PetscObject) (p);\ 261e24b481bSBarry Smith ((PetscObject)(c))->parentid = ((PetscObject) p)->id;} 26277c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 26377c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 264b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 265b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 26677c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 26777c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 268e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...); 269cf256101SBarry Smith extern int PLogDestroy(void); 27077c4ece6SBarry Smith extern int PLogStagePush(int); 2711d508c8cSSatish Balay extern int PLogStagePop(void); 272e26ad7d8SSatish Balay extern int PLogStageRegister(int,const char[]); 273e26ad7d8SSatish Balay extern int PLogPrintSummary(MPI_Comm,const char[]); 2741d508c8cSSatish Balay extern int PLogBegin(void); 275bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 2761d508c8cSSatish Balay extern int PLogAllBegin(void); 277bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 278bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 279e26ad7d8SSatish Balay extern int PLogDump(const char[]); 280e26ad7d8SSatish Balay extern int PLogEventRegister(int*,const char[],const char[]); 28199de4ba8SSatish Balay extern int PetscGetFlops(PLogDouble*); 28277c4ece6SBarry Smith 28347794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 28447794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 28547794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 286ca161407SBarry Smith extern int PETSC_DUMMY,PETSC_DUMMY_SIZE; 287ca161407SBarry Smith 288ce85283eSBarry Smith /* 28984cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 290ce85283eSBarry Smith uses macros to defined the MPI operations. 29115308354SBarry Smith 29215308354SBarry Smith It does not work correctly from HP-UX because it processes the 293bb4af37aSBarry Smith macros in a way that sometimes it double counts, hence 294bb4af37aSBarry Smith HAVE_BROKEN_RECURSIVE_MACRO 2957c1e34a4SSatish Balay 2967c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 297ce85283eSBarry Smith */ 298488ecbafSBarry Smith #if !defined(USING_MPIUNI) && !defined(HAVE_BROKEN_RECURSIVE_MACRO) 29977a39924SBarry Smith /* 30077a39924SBarry Smith Logging of MPI activities 30177a39924SBarry Smith */ 30277a39924SBarry Smith 30377a39924SBarry Smith #define TypeSize(buff,count,type) \ 304ca161407SBarry Smith ( \ 305ca161407SBarry Smith MPI_Type_size(type,&PETSC_DUMMY_SIZE), buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \ 306ca161407SBarry Smith ) 30777a39924SBarry Smith 30877a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 309ca161407SBarry Smith ( \ 310ca161407SBarry Smith PETSC_DUMMY = MPI_Irecv( buf, count, datatype, source, tag, comm, request), \ 311ca161407SBarry Smith irecv_ct++, TypeSize(irecv_len,count,datatype),PETSC_DUMMY \ 312ca161407SBarry Smith ) 31315308354SBarry Smith 31477a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 315ca161407SBarry Smith ( \ 316ca161407SBarry Smith PETSC_DUMMY = MPI_Isend( buf, count, datatype, dest, tag, comm, request), \ 317ca161407SBarry Smith isend_ct++, TypeSize(isend_len,count,datatype),PETSC_DUMMY \ 318ca161407SBarry Smith ) 31915308354SBarry Smith 3200d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 321ca161407SBarry Smith ( \ 322ca161407SBarry Smith PETSC_DUMMY = MPI_Startall( number, requests), \ 323ca161407SBarry Smith irecv_ct += (PLogDouble)(number), irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 324ca161407SBarry Smith ) 3250d4b0b6cSBarry Smith 3260d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 327ca161407SBarry Smith ( \ 328ca161407SBarry Smith PETSC_DUMMY = MPI_Startall( number, requests), \ 329ca161407SBarry Smith isend_ct += (PLogDouble)(number), isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 330ca161407SBarry Smith ) 3310d4b0b6cSBarry Smith 3320d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests)\ 333ca161407SBarry Smith (\ 334ca161407SBarry Smith PETSC_DUMMY = MPI_Start( requests),\ 335ca161407SBarry Smith isend_ct++, isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\ 336ca161407SBarry Smith ) 3370d4b0b6cSBarry Smith 338ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 339ca161407SBarry Smith ( \ 340ca161407SBarry Smith PETSC_DUMMY = MPI_Recv( buf, count, datatype, source, tag, comm, status), \ 341ca161407SBarry Smith recv_ct++, TypeSize(recv_len,count,datatype), PETSC_DUMMY \ 342ca161407SBarry Smith ) 34315308354SBarry Smith 34477a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 345ca161407SBarry Smith ( \ 346ca161407SBarry Smith PETSC_DUMMY = MPI_Send( buf, count, datatype, dest, tag, comm), \ 347ca161407SBarry Smith send_ct++, TypeSize(send_len,count,datatype),PETSC_DUMMY \ 348ca161407SBarry Smith ) 34977a39924SBarry Smith 35077a39924SBarry Smith #define MPI_Wait(request, status) \ 35177a39924SBarry Smith ( \ 352e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 35377a39924SBarry Smith MPI_Wait(request, status) \ 35477a39924SBarry Smith ) 35577a39924SBarry Smith 35677a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 35777a39924SBarry Smith ( \ 358e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 35977a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 36077a39924SBarry Smith ) 36177a39924SBarry Smith 36277a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 36377a39924SBarry Smith ( \ 36447794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 36577a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 36677a39924SBarry Smith ) 36777a39924SBarry Smith 36877a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 369005c665bSBarry Smith (allreduce_ct++,MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm)) 3703914022bSBarry Smith 3710d4b0b6cSBarry Smith #else 3720d4b0b6cSBarry Smith 3730d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 374ca161407SBarry Smith ( \ 375ca161407SBarry Smith MPI_Startall( number, requests) \ 376ca161407SBarry Smith ) 3770d4b0b6cSBarry Smith 3780d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 379ca161407SBarry Smith ( \ 380ca161407SBarry Smith MPI_Startall( number, requests) \ 381ca161407SBarry Smith ) 3820d4b0b6cSBarry Smith 3830d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 384ca161407SBarry Smith ( \ 385ca161407SBarry Smith MPI_Start( requests) \ 386ca161407SBarry Smith ) 3870d4b0b6cSBarry Smith 388488ecbafSBarry Smith #endif /* !USING_MPIUNI && ! HAVE_BROKEN_RECURSIVE_MACRO */ 389614700edSBarry Smith 390df8cf0b5SBarry Smith #else /* ---Logging is turned off --------------------------------------------*/ 391614700edSBarry Smith 392614700edSBarry Smith #define PLogFlops(n) 393614700edSBarry Smith 394df8cf0b5SBarry Smith /* 395df8cf0b5SBarry Smith With logging turned off, then MPE has to be turned off 396df8cf0b5SBarry Smith */ 397614700edSBarry Smith #define MPEBEGIN 1000 398df8cf0b5SBarry Smith #define PLogMPEBegin() 399df8cf0b5SBarry Smith #define PLogMPEDump(a) 400bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 401bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 402614700edSBarry Smith 403bf343e40SBarry Smith #define PLogEventActivate(a) 0 404bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 405614700edSBarry Smith 406bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 407bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 40877c4ece6SBarry Smith 409b3bbe94bSBarry Smith #define _PLogPLB 0 410b3bbe94bSBarry Smith #define _PLogPLE 0 411b3bbe94bSBarry Smith #define _PLogPHC 0 412b3bbe94bSBarry Smith #define _PLogPHD 0 41399de4ba8SSatish Balay #define PetscGetFlops(a) (*(a) = 0.0,0) 414d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 415d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 416005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 417005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) 418d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 419d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 420d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 421d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 422d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 423d7a720efSLois Curfman McInnes #define PLogDestroy() 424bf343e40SBarry Smith #define PLogStagePush(a) 425d7a720efSLois Curfman McInnes #define PLogStagePop() 426d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 427d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 428d7a720efSLois Curfman McInnes #define PLogBegin() 429974088aaSSatish Balay #define PLogTraceBegin(file) 0 430bc1211c7SBarry Smith #define PLogSet(lb,le) 431d7a720efSLois Curfman McInnes #define PLogAllBegin() 432e26ad7d8SSatish Balay #define PLogDump(c) 433dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 434d7a720efSLois Curfman McInnes #define PLogMPEBegin() 435d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 436e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...); 437ce6058e1SBarry Smith 4383a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */ 439ca161407SBarry Smith #define MPI_Startall_irecv( count,number,requests) MPI_Startall( number, requests) 440ce6058e1SBarry Smith 441ca161407SBarry Smith #define MPI_Startall_isend( count,number,requests) MPI_Startall( number, requests) 442ce6058e1SBarry Smith 443ca161407SBarry Smith #define MPI_Start_isend(count, requests) MPI_Start( requests) 444ca161407SBarry Smith 4453a40ed3dSBarry Smith #endif /* USE_PETSC_LOG */ 4466daaf66cSBarry Smith 447e0937024SBarry Smith 44897bb86f7SLois Curfman McInnes #endif 44941debaddSBarry Smith 45077c4ece6SBarry Smith 45177c4ece6SBarry Smith 45284cb2905SBarry Smith 45384cb2905SBarry Smith 45484cb2905SBarry Smith 455