1*b0a32e0cSBarry Smith /* $Id: petsclog.h,v 1.149 2000/11/28 17:33:05 bsmith Exp bsmith $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 47588ac45SBarry Smith Defines profile/logging in PETSc. 597bb86f7SLois Curfman McInnes */ 697bb86f7SLois Curfman McInnes 7*b0a32e0cSBarry Smith #if !defined(__PetscLog_H) 8*b0a32e0cSBarry Smith #define __PetscLog_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 15*b0a32e0cSBarry Smith petsc/src/PetscLog/src/PetscLog.c, 16*b0a32e0cSBarry Smith petsc/src/PetscLog/src/PetscLogmpe.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 57c05cbf03SBarry Smith #define MAT_FDColoringApply 38 58c05cbf03SBarry Smith #define MAT_FDColoringCreate 41 59c05cbf03SBarry Smith 600462333dSBarry Smith #define VEC_ReduceArithmetic 37 61c05cbf03SBarry Smith 62c05cbf03SBarry Smith #define VEC_View 39 63c05cbf03SBarry Smith 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_MAXPY 56 784dcbc457SBarry Smith #define VEC_PMult 57 794dcbc457SBarry Smith #define VEC_SetValues 58 804dcbc457SBarry Smith #define VEC_Load 59 81c05cbf03SBarry Smith #define VEC_ScatterBarrier 60 824dcbc457SBarry Smith #define VEC_ScatterBegin 61 834dcbc457SBarry Smith #define VEC_ScatterEnd 62 84bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 8597bb86f7SLois Curfman McInnes 86005c665bSBarry Smith #define VEC_NormBarrier 64 87c05cbf03SBarry Smith #define VEC_Norm 65 88005c665bSBarry Smith #define VEC_DotBarrier 66 89c05cbf03SBarry Smith #define VEC_Dot 67 90005c665bSBarry Smith #define VEC_MDotBarrier 68 91c05cbf03SBarry Smith #define VEC_MDot 69 92005c665bSBarry Smith 934dcbc457SBarry Smith #define SLES_Solve 70 944dcbc457SBarry Smith #define SLES_SetUp 71 9597bb86f7SLois Curfman McInnes 964dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 9797bb86f7SLois Curfman McInnes 98b55e19fdSBarry Smith #define PC_ApplyCoarse 73 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 115c05cbf03SBarry Smith #define VEC_ReduceComm 88 1160462333dSBarry Smith 117682d7d0cSBarry Smith #define TS_Step 90 118bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 1197c922b88SBarry Smith #define TS_FunctionEval 92 1207c922b88SBarry Smith #define TS_JacobianEval 93 12172936c9dSBarry Smith 12272936c9dSBarry Smith #define Petsc_Barrier 100 12355206aebSLois Curfman McInnes 1240513a670SBarry Smith #define EC_SetUp 105 1250513a670SBarry Smith #define EC_Solve 106 1260513a670SBarry Smith 12741debaddSBarry Smith /* 128*b0a32e0cSBarry Smith Event numbers PetscLog_USER_EVENT_LOW to PetscLog_USER_EVENT_HIGH are reserved 129*b0a32e0cSBarry Smith for applications. Make sure that src/PetscLog/src/PetscLog.c defines enough 130*b0a32e0cSBarry Smith entries in (*name)[] to go up to PetscLog_USER_EVENT_HIGH. 13141debaddSBarry Smith */ 132*b0a32e0cSBarry Smith #define PetscLog_USER_EVENT_LOW_STATIC 120 133*b0a32e0cSBarry Smith #define PetscLog_USER_EVENT_HIGH 200 13497bb86f7SLois Curfman McInnes 13519b02663SBarry Smith /* Global flop counter */ 136*b0a32e0cSBarry Smith extern PetscLogDouble _TotalFlops; 13719b02663SBarry Smith 138edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 139*b0a32e0cSBarry Smith EXTERN int PetscLogInfo(void*,const char[],...); 140*b0a32e0cSBarry Smith EXTERN int PetscLogInfoDeactivateClass(int); 141*b0a32e0cSBarry Smith EXTERN int PetscLogInfoActivateClass(int); 142*b0a32e0cSBarry Smith extern PetscTruth PetscLogPrintInfo; /* if true, indicates PetscLogInfo() is turned on */ 143614700edSBarry Smith 144aa482453SBarry Smith #if defined(PETSC_USE_LOG) /* --- Logging is turned on --------------------------------*/ 145614700edSBarry Smith 146da63de55SLois Curfman McInnes /* 147da63de55SLois Curfman McInnes Flop counting: We count each arithmetic operation (e.g., addition, multiplication) separately. 148da63de55SLois Curfman McInnes 149da63de55SLois Curfman McInnes For the complex numbers version, note that 150da63de55SLois Curfman McInnes 1 complex addition = 2 flops 151da63de55SLois Curfman McInnes 1 complex multiplication = 6 flops, 152da63de55SLois Curfman McInnes where we define 1 flop as that for a double precision scalar. We roughly approximate 153da63de55SLois Curfman McInnes flop counting for complex numbers by multiplying the total flops by 4; this corresponds 154da63de55SLois Curfman McInnes to the assumption that we're counting mostly additions and multiplications -- and 155da63de55SLois Curfman McInnes roughly the same number of each. More accurate counting could be done by distinguishing 156da63de55SLois Curfman McInnes among the various arithmetic operations. 157da63de55SLois Curfman McInnes */ 158da63de55SLois Curfman McInnes 159aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX) 160*b0a32e0cSBarry Smith #define PetscLogFlops(n) (_TotalFlops += (4*n),0) 161da63de55SLois Curfman McInnes #else 162*b0a32e0cSBarry Smith #define PetscLogFlops(n) (_TotalFlops += (n),0) 163da63de55SLois Curfman McInnes #endif 16477c4ece6SBarry Smith 165aa482453SBarry Smith #if defined (PETSC_HAVE_MPE) 16677c4ece6SBarry Smith #include "mpe.h" 167614700edSBarry Smith #define MPEBEGIN 1000 168*b0a32e0cSBarry Smith EXTERN int PetscLogMPEBegin(void); 169*b0a32e0cSBarry Smith EXTERN int PetscLogMPEDump(const char[]); 17035d8aa7fSBarry Smith extern PetscTruth UseMPE; 171*b0a32e0cSBarry Smith extern int PetscLogEventMPEFlags[]; 172*b0a32e0cSBarry Smith EXTERN int PetscLogEventMPEActivate(int); 173*b0a32e0cSBarry Smith EXTERN int PetscLogEventMPEDeactivate(int); 174614700edSBarry Smith #else 175*b0a32e0cSBarry Smith #define PetscLogEventMPEActivate(a) 0 176*b0a32e0cSBarry Smith #define PetscLogEventMPEDeactivate(a) 0 17777c4ece6SBarry Smith #endif 17877c4ece6SBarry Smith 179*b0a32e0cSBarry Smith EXTERN int PetscLogEventActivate(int); 180*b0a32e0cSBarry Smith EXTERN int PetscLogEventDeactivate(int); 181614700edSBarry Smith 182*b0a32e0cSBarry Smith EXTERN int PetscLogEventActivateClass(int); 183*b0a32e0cSBarry Smith EXTERN int PetscLogEventDeactivateClass(int); 184614700edSBarry Smith 185*b0a32e0cSBarry Smith extern PetscTruth PetscLogEventFlags[]; 186*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 187*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 188*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPHC)(PetscObject); 189*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPHD)(PetscObject); 19077c4ece6SBarry Smith 191*b0a32e0cSBarry Smith extern int PetscLogEventDepth[]; 1920743b949SBarry Smith 193aa482453SBarry Smith #if defined(PETSC_HAVE_MPE) 194*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 195a560533bSSatish Balay 0; { int __ierr; \ 196*b0a32e0cSBarry Smith if (_PetscLogPLB && PetscLogEventFlags[e]) { \ 197*b0a32e0cSBarry Smith __ierr = PetscLogEventBegin((e),o1,o2,o3,o4);CHKERRQ(__ierr); \ 198*b0a32e0cSBarry Smith if (UseMPE && PetscLogEventMPEFlags[(e)]) \ 199005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,""); \ 200a560533bSSatish Balay __ierr = MPI_Barrier(cm);CHKERRQ(__ierr); \ 201*b0a32e0cSBarry Smith __ierr = PetscLogEventEnd((e),o1,o2,o3,o4);CHKERRQ(__ierr); \ 202*b0a32e0cSBarry Smith if (UseMPE && PetscLogEventMPEFlags[(e)]) \ 203005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,""); \ 204005c665bSBarry Smith } \ 205*b0a32e0cSBarry Smith __ierr = PetscLogEventBegin(e+1,o1,o2,o3,o4);CHKERRQ(__ierr); \ 206*b0a32e0cSBarry Smith if (UseMPE && PetscLogEventMPEFlags[(e)+1]) \ 207005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,""); \ 208005c665bSBarry Smith } 209*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4) \ 210102ac143SSatish Balay 0; { \ 211*b0a32e0cSBarry Smith if (_PetscLogPLB && PetscLogEventFlags[(e)] && !PetscLogEventDepth[e]++) {\ 212*b0a32e0cSBarry Smith (*_PetscLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 213*b0a32e0cSBarry Smith if (UseMPE && PetscLogEventMPEFlags[(e)])\ 214005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 21577c4ece6SBarry Smith } 21677c4ece6SBarry Smith #else 217*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 218a560533bSSatish Balay 0; { int __ierr;\ 219*b0a32e0cSBarry Smith if (_PetscLogPLB && PetscLogEventFlags[(e)]) { \ 220*b0a32e0cSBarry Smith __ierr = PetscLogEventBegin((e),o1,o2,o3,o4);CHKERRQ(__ierr); \ 221a560533bSSatish Balay __ierr = MPI_Barrier(cm);CHKERRQ(__ierr); \ 222*b0a32e0cSBarry Smith __ierr = PetscLogEventEnd((e),o1,o2,o3,o4);CHKERRQ(__ierr); \ 223005c665bSBarry Smith } \ 224*b0a32e0cSBarry Smith __ierr = PetscLogEventBegin((e)+1,o1,o2,o3,o4);CHKERRQ(__ierr); \ 225005c665bSBarry Smith } 226*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4) \ 227102ac143SSatish Balay 0; { \ 228*b0a32e0cSBarry Smith if (_PetscLogPLB && PetscLogEventFlags[(e)] && !PetscLogEventDepth[e]++) {\ 229*b0a32e0cSBarry Smith (*_PetscLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 23077c4ece6SBarry Smith } 23177c4ece6SBarry Smith #endif 23277c4ece6SBarry Smith 233aa482453SBarry Smith #if defined(PETSC_HAVE_MPE) 234*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm) PetscLogEventEnd(e+1,o1,o2,o3,o4) 235*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4) \ 236102ac143SSatish Balay 0; {\ 237*b0a32e0cSBarry Smith if (_PetscLogPLE && PetscLogEventFlags[(e)] && !--PetscLogEventDepth[e]) {\ 238*b0a32e0cSBarry Smith (*_PetscLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 239*b0a32e0cSBarry Smith if (UseMPE && PetscLogEventMPEFlags[(e)])\ 240005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\ 241a1b5d808SSatish Balay } 24277c4ece6SBarry Smith #else 243*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm) PetscLogEventEnd(e+1,o1,o2,o3,o4) 244*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4) \ 245102ac143SSatish Balay 0; {\ 246*b0a32e0cSBarry Smith if (_PetscLogPLE && PetscLogEventFlags[(e)] && !--PetscLogEventDepth[e]) {\ 247*b0a32e0cSBarry Smith (*_PetscLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\ 248a1b5d808SSatish Balay } 24977c4ece6SBarry Smith #endif 25077c4ece6SBarry Smith 251*b0a32e0cSBarry Smith #define PetscLogObjectParent(p,c) if (c) {PetscValidHeader((PetscObject)(c)); \ 2523a40ed3dSBarry Smith PetscValidHeader((PetscObject)(p));\ 253e24b481bSBarry Smith ((PetscObject)(c))->parent = (PetscObject)(p);\ 254e24b481bSBarry Smith ((PetscObject)(c))->parentid = ((PetscObject)p)->id;} 255*b0a32e0cSBarry Smith #define PetscLogObjectParents(p,n,d) {int _i; for (_i=0; _i<n; _i++) \ 256*b0a32e0cSBarry Smith PetscLogObjectParent(p,(d)[_i]);} 257*b0a32e0cSBarry Smith #define PetscLogObjectCreate(h) {if (_PetscLogPHC) (*_PetscLogPHC)((PetscObject)h);} 258*b0a32e0cSBarry Smith #define PetscLogObjectDestroy(h) {if (_PetscLogPHD) (*_PetscLogPHD)((PetscObject)h);} 259*b0a32e0cSBarry Smith #define PetscLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 26077c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 261*b0a32e0cSBarry Smith EXTERN int PetscLogObjectState(PetscObject,const char[],...); 262*b0a32e0cSBarry Smith EXTERN int PetscLogDestroy(void); 263*b0a32e0cSBarry Smith EXTERN int PetscLogStagePush(int); 264*b0a32e0cSBarry Smith EXTERN int PetscLogStagePop(void); 265*b0a32e0cSBarry Smith EXTERN int PetscLogStageRegister(int,const char[]); 266*b0a32e0cSBarry Smith EXTERN int PetscLogStagePrint(int,PetscTruth); 267*b0a32e0cSBarry Smith EXTERN int PetscLogPrintSummary(MPI_Comm,const char[]); 268*b0a32e0cSBarry Smith EXTERN int PetscLogBegin(void); 269*b0a32e0cSBarry Smith EXTERN int PetscLogTraceBegin(FILE *); 270*b0a32e0cSBarry Smith EXTERN int PetscLogAllBegin(void); 271*b0a32e0cSBarry Smith EXTERN int PetscLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 272bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 273*b0a32e0cSBarry Smith EXTERN int PetscLogDump(const char[]); 274*b0a32e0cSBarry Smith EXTERN int PetscLogEventRegister(int*,const char[],const char[]); 275*b0a32e0cSBarry Smith EXTERN int PetscGetFlops(PetscLogDouble*); 27677c4ece6SBarry Smith 277*b0a32e0cSBarry Smith extern PetscLogDouble irecv_ct,isend_ct,wait_ct,wait_any_ct,recv_ct,send_ct; 278*b0a32e0cSBarry Smith extern PetscLogDouble irecv_len,isend_len,recv_len,send_len; 279*b0a32e0cSBarry Smith extern PetscLogDouble 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 288aa482453SBarry Smith PETSC_HAVE_BROKEN_RECURSIVE_MACRO 2897c1e34a4SSatish Balay 2907c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 291ce85283eSBarry Smith */ 29267b8f57cSSatish Balay #if !defined(USING_MPIUNI) && !defined(PETSC_HAVE_BROKEN_RECURSIVE_MACRO) && !defined (PETSC_HAVE_MPI_MISSING_TYPESIZE) 29377a39924SBarry Smith /* 29477a39924SBarry Smith Logging of MPI activities 29577a39924SBarry Smith */ 29677a39924SBarry Smith 29777a39924SBarry Smith #define TypeSize(buff,count,type) \ 298ca161407SBarry Smith (\ 299*b0a32e0cSBarry Smith MPI_Type_size(type,&PETSC_DUMMY_SIZE),buff += ((PetscLogDouble) ((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), \ 317*b0a32e0cSBarry Smith irecv_ct += (PetscLogDouble)(number),irecv_len += ((PetscLogDouble) ((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), \ 323*b0a32e0cSBarry Smith isend_ct += (PetscLogDouble)(number),isend_len += ((PetscLogDouble) ((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),\ 329*b0a32e0cSBarry Smith isend_ct++,isend_len += ((PetscLogDouble) ((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 (\ 358*b0a32e0cSBarry Smith wait_all_ct++,sum_of_waits_ct += (PetscLogDouble) (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) \ 3630743b949SBarry Smith (\ 3640743b949SBarry Smith allreduce_ct++,MPI_Allreduce(sendbuf,recvbuf,count,datatype,op,comm)\ 3650743b949SBarry Smith ) 3663914022bSBarry Smith 3670d4b0b6cSBarry Smith #else 3680d4b0b6cSBarry Smith 3690d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests) \ 370ca161407SBarry Smith (\ 371ca161407SBarry Smith MPI_Startall(number,requests) \ 372ca161407SBarry Smith ) 3730d4b0b6cSBarry Smith 3740d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests) \ 375ca161407SBarry Smith (\ 376ca161407SBarry Smith MPI_Startall(number,requests) \ 377ca161407SBarry Smith ) 3780d4b0b6cSBarry Smith 3790d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 380ca161407SBarry Smith (\ 381ca161407SBarry Smith MPI_Start(requests) \ 382ca161407SBarry Smith ) 3830d4b0b6cSBarry Smith 384aa482453SBarry Smith #endif /* !USING_MPIUNI && ! PETSC_HAVE_BROKEN_RECURSIVE_MACRO */ 385614700edSBarry Smith 386df8cf0b5SBarry Smith #else /* ---Logging is turned off --------------------------------------------*/ 387614700edSBarry Smith 388*b0a32e0cSBarry Smith #define PetscLogFlops(n) 0 389614700edSBarry Smith 390df8cf0b5SBarry Smith /* 391df8cf0b5SBarry Smith With logging turned off, then MPE has to be turned off 392df8cf0b5SBarry Smith */ 393614700edSBarry Smith #define MPEBEGIN 1000 394*b0a32e0cSBarry Smith #define PetscLogMPEBegin() 0 395*b0a32e0cSBarry Smith #define PetscLogMPEDump(a) 0 396*b0a32e0cSBarry Smith #define PetscLogEventMPEActivate(a) 0 397*b0a32e0cSBarry Smith #define PetscLogEventMPEDeactivate(a) 0 398614700edSBarry Smith 399*b0a32e0cSBarry Smith #define PetscLogEventActivate(a) 0 400*b0a32e0cSBarry Smith #define PetscLogEventDeactivate(a) 0 401614700edSBarry Smith 402*b0a32e0cSBarry Smith #define PetscLogEventActivateClass(a) 0 403*b0a32e0cSBarry Smith #define PetscLogEventDeactivateClass(a) 0 40477c4ece6SBarry Smith 405*b0a32e0cSBarry Smith #define _PetscLogPLB 0 406*b0a32e0cSBarry Smith #define _PetscLogPLE 0 407*b0a32e0cSBarry Smith #define _PetscLogPHC 0 408*b0a32e0cSBarry Smith #define _PetscLogPHD 0 40999de4ba8SSatish Balay #define PetscGetFlops(a) (*(a) = 0.0,0) 410*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4) 0 411*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4) 0 412*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 0 413*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm) 0 414*b0a32e0cSBarry Smith #define PetscLogObjectParent(p,c) 415*b0a32e0cSBarry Smith #define PetscLogObjectParents(p,n,c) 416*b0a32e0cSBarry Smith #define PetscLogObjectCreate(h) 417*b0a32e0cSBarry Smith #define PetscLogObjectDestroy(h) 418*b0a32e0cSBarry Smith #define PetscLogObjectMemory(p,m) 419*b0a32e0cSBarry Smith #define PetscLogDestroy() 0 420*b0a32e0cSBarry Smith #define PetscLogStagePush(a) 0 421*b0a32e0cSBarry Smith #define PetscLogStagePop() 0 422*b0a32e0cSBarry Smith #define PetscLogStageRegister(a,b) 0 423*b0a32e0cSBarry Smith #define PetscLogStagePrint(a,flg) 0 424*b0a32e0cSBarry Smith #define PetscLogPrintSummary(comm,file) 0 425*b0a32e0cSBarry Smith #define PetscLogBegin() 0 426*b0a32e0cSBarry Smith #define PetscLogTraceBegin(file) 0 427*b0a32e0cSBarry Smith #define PetscLogSet(lb,le) 0 428*b0a32e0cSBarry Smith #define PetscLogAllBegin() 0 429*b0a32e0cSBarry Smith #define PetscLogDump(c) 0 430*b0a32e0cSBarry Smith #define PetscLogEventRegister(a,b,c) 0 431*b0a32e0cSBarry Smith EXTERN int PetscLogObjectState(PetscObject,const char[],...); 432ce6058e1SBarry Smith 433aa482453SBarry Smith /* If PETSC_USE_LOG is NOT defined, these still need to be! */ 434ca161407SBarry Smith #define MPI_Startall_irecv(count,number,requests) MPI_Startall(number,requests) 435ce6058e1SBarry Smith 436ca161407SBarry Smith #define MPI_Startall_isend(count,number,requests) MPI_Startall(number,requests) 437ce6058e1SBarry Smith 438ca161407SBarry Smith #define MPI_Start_isend(count,requests) MPI_Start(requests) 439ca161407SBarry Smith 440aa482453SBarry Smith #endif /* PETSC_USE_LOG */ 4416daaf66cSBarry Smith 4421d1367b7SBarry Smith extern PetscTruth PetscPreLoadingUsed; 4431d1367b7SBarry Smith 444e7592fafSBarry Smith #define PreLoadBegin(flag,name) {PetscTruth PreLoading = flag; int PreLoadMax,PreLoadIt,__ierr;\ 445*b0a32e0cSBarry Smith __ierr = PetscOptionsGetLogical(PETSC_NULL,"-preload",&PreLoading,PETSC_NULL);CHKERRQ(__ierr);\ 4461d1367b7SBarry Smith PreLoadMax = (int)(PreLoading);PetscPreLoadingUsed = PreLoading ? PETSC_TRUE : PetscPreLoadingUsed;\ 447e7592fafSBarry Smith for (PreLoadIt=0; PreLoadIt<=PreLoadMax; PreLoadIt++) {\ 448e7592fafSBarry Smith __ierr = PetscBarrier(PETSC_NULL);CHKERRQ(__ierr);\ 449*b0a32e0cSBarry Smith __ierr = PetscLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\ 450*b0a32e0cSBarry Smith __ierr = PetscLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);\ 451*b0a32e0cSBarry Smith __ierr = PetscLogStagePrint(PETSC_DETERMINE,(PetscTruth)(!PreLoadMax || PreLoadIt)); 452*b0a32e0cSBarry Smith #define PreLoadEnd() __ierr = PetscLogStagePop();CHKERRQ(__ierr);PreLoading = PETSC_FALSE;}} 453*b0a32e0cSBarry Smith #define PreLoadStage(name) __ierr = PetscLogStagePop();CHKERRQ(__ierr);\ 454*b0a32e0cSBarry Smith __ierr = PetscLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\ 455*b0a32e0cSBarry Smith __ierr = PetscLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);\ 456*b0a32e0cSBarry Smith __ierr = PetscLogStagePrint(PETSC_DETERMINE,(PetscTruth)(!PreLoadMax || PreLoadIt)); 45797bb86f7SLois Curfman McInnes #endif 45841debaddSBarry Smith 45977c4ece6SBarry Smith 46077c4ece6SBarry Smith 46184cb2905SBarry Smith 46284cb2905SBarry Smith 46384cb2905SBarry Smith 464