1*1d508c8cSSatish Balay /* $Id: petsclog.h,v 1.117 1998/03/23 21:27:32 bsmith Exp balay $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 47588ac45SBarry Smith Defines profile/logging in PETSc. 597bb86f7SLois Curfman McInnes */ 697bb86f7SLois Curfman McInnes 797bb86f7SLois Curfman McInnes #if !defined(__PLOG_PACKAGE) 897bb86f7SLois Curfman McInnes #define __PLOG_PACKAGE 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 19e10960a1SSatish Balay petsc/include/FINCLUDE/petsclog.h!!! 2097bb86f7SLois Curfman McInnes */ 2197bb86f7SLois Curfman McInnes #define MAT_Mult 0 221ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult 1 231ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin 2 241ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd 3 251ff317f7SLois Curfman McInnes #define MAT_GetReordering 4 261ff317f7SLois Curfman McInnes #define MAT_MultTrans 5 271ff317f7SLois Curfman McInnes #define MAT_MultAdd 6 281ff317f7SLois Curfman McInnes #define MAT_MultTransAdd 7 291ff317f7SLois Curfman McInnes #define MAT_LUFactor 8 301ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor 9 311ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 10 321ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 11 331ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 12 341ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 13 351ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric 14 361ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 15 371ff317f7SLois Curfman McInnes #define MAT_Relax 16 381ff317f7SLois Curfman McInnes #define MAT_Copy 17 391ff317f7SLois Curfman McInnes #define MAT_Convert 18 401ff317f7SLois Curfman McInnes #define MAT_Scale 19 411ff317f7SLois Curfman McInnes #define MAT_ZeroEntries 20 421ff317f7SLois Curfman McInnes #define MAT_Solve 21 431ff317f7SLois Curfman McInnes #define MAT_SolveAdd 22 441ff317f7SLois Curfman McInnes #define MAT_SolveTrans 23 451ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd 24 461ff317f7SLois Curfman McInnes #define MAT_SetValues 25 471ff317f7SLois Curfman McInnes #define MAT_ForwardSolve 26 481ff317f7SLois Curfman McInnes #define MAT_BackwardSolve 27 491ff317f7SLois Curfman McInnes #define MAT_Load 28 501ff317f7SLois Curfman McInnes #define MAT_View 29 511ff317f7SLois Curfman McInnes #define MAT_ILUFactor 30 523e584e2eSBarry Smith #define MAT_GetColoring 31 531ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices 32 541ff317f7SLois Curfman McInnes #define MAT_GetValues 33 551ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap 34 56dd8bebb4SSatish Balay #define MAT_GetRow 35 57ca161407SBarry Smith #define MAT_Partitioning 36 5897bb86f7SLois Curfman McInnes 59005c665bSBarry Smith #define VEC_ScatterBarrier 39 604dcbc457SBarry Smith #define VEC_Dot 40 614dcbc457SBarry Smith #define VEC_Norm 41 624dcbc457SBarry Smith #define VEC_Max 42 634dcbc457SBarry Smith #define VEC_Min 43 644dcbc457SBarry Smith #define VEC_TDot 44 654dcbc457SBarry Smith #define VEC_Scale 45 664dcbc457SBarry Smith #define VEC_Copy 46 674dcbc457SBarry Smith #define VEC_Set 47 684dcbc457SBarry Smith #define VEC_AXPY 48 694dcbc457SBarry Smith #define VEC_AYPX 49 704dcbc457SBarry Smith #define VEC_Swap 50 714dcbc457SBarry Smith #define VEC_WAXPY 51 724dcbc457SBarry Smith #define VEC_AssemblyBegin 52 734dcbc457SBarry Smith #define VEC_AssemblyEnd 53 744dcbc457SBarry Smith #define VEC_MTDot 54 754dcbc457SBarry Smith #define VEC_MDot 55 764dcbc457SBarry Smith #define VEC_MAXPY 56 774dcbc457SBarry Smith #define VEC_PMult 57 784dcbc457SBarry Smith #define VEC_SetValues 58 794dcbc457SBarry Smith #define VEC_Load 59 804dcbc457SBarry Smith #define VEC_View 60 814dcbc457SBarry Smith #define VEC_ScatterBegin 61 824dcbc457SBarry Smith #define VEC_ScatterEnd 62 83bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 8497bb86f7SLois Curfman McInnes 85005c665bSBarry Smith #define VEC_NormBarrier 64 86005c665bSBarry Smith #define VEC_NormComm 65 87005c665bSBarry Smith #define VEC_DotBarrier 66 88005c665bSBarry Smith #define VEC_DotComm 67 89005c665bSBarry Smith #define VEC_MDotBarrier 68 90005c665bSBarry Smith #define VEC_MDotComm 69 91005c665bSBarry Smith 924dcbc457SBarry Smith #define SLES_Solve 70 934dcbc457SBarry Smith #define SLES_SetUp 71 9497bb86f7SLois Curfman McInnes 954dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 9697bb86f7SLois Curfman McInnes 971bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices 74 984dcbc457SBarry Smith #define PC_SetUp 75 9936058207SBarry Smith #define PC_SetUpOnBlocks 76 10032284f49SSatish Balay #define PC_Apply 77 101614700edSBarry Smith #define PC_ApplySymmetricLeft 78 102614700edSBarry Smith #define PC_ApplySymmetricRight 79 1034dcbc457SBarry Smith 1044dcbc457SBarry Smith #define SNES_Solve 80 1054dcbc457SBarry Smith #define SNES_LineSearch 81 1064dcbc457SBarry Smith #define SNES_FunctionEval 82 1074dcbc457SBarry Smith #define SNES_JacobianEval 83 1084dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 1094dcbc457SBarry Smith #define SNES_GradientEval 85 1104dcbc457SBarry Smith #define SNES_HessianEval 86 1114dcbc457SBarry Smith 112682d7d0cSBarry Smith #define TS_Step 90 113bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 11472936c9dSBarry Smith 11572936c9dSBarry Smith #define Petsc_Barrier 100 11655206aebSLois Curfman McInnes 1170513a670SBarry Smith #define EC_SetUp 105 1180513a670SBarry Smith #define EC_Solve 106 1190513a670SBarry Smith 12055206aebSLois Curfman McInnes #define DFVec_RefineVector 110 12155206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 12255206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 12355206aebSLois Curfman McInnes #define DFVec_DrawContours 113 12455206aebSLois Curfman McInnes 12541debaddSBarry Smith /* 126b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 12777c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 128b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 12941debaddSBarry Smith */ 13035aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1314dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 13297bb86f7SLois Curfman McInnes 13319b02663SBarry Smith /* Global flop counter */ 13447794344SBarry Smith extern PLogDouble _TotalFlops; 13519b02663SBarry Smith 136edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 13794a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 138cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 139614700edSBarry Smith extern int PLogInfoActivateClass(int); 14043a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 141614700edSBarry Smith 1423a40ed3dSBarry Smith #if defined(USE_PETSC_LOG) /* --- Logging is turned on --------------------------------*/ 143614700edSBarry Smith 144da63de55SLois Curfman McInnes /* 145da63de55SLois Curfman McInnes Flop counting: We count each arithmetic operation (e.g., addition, multiplication) separately. 146da63de55SLois Curfman McInnes 147da63de55SLois Curfman McInnes For the complex numbers version, note that 148da63de55SLois Curfman McInnes 1 complex addition = 2 flops 149da63de55SLois Curfman McInnes 1 complex multiplication = 6 flops, 150da63de55SLois Curfman McInnes where we define 1 flop as that for a double precision scalar. We roughly approximate 151da63de55SLois Curfman McInnes flop counting for complex numbers by multiplying the total flops by 4; this corresponds 152da63de55SLois Curfman McInnes to the assumption that we're counting mostly additions and multiplications -- and 153da63de55SLois Curfman McInnes roughly the same number of each. More accurate counting could be done by distinguishing 154da63de55SLois Curfman McInnes among the various arithmetic operations. 155da63de55SLois Curfman McInnes */ 156da63de55SLois Curfman McInnes 1573a40ed3dSBarry Smith #if defined(USE_PETSC_COMPLEX) 158da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);} 159da63de55SLois Curfman McInnes #else 160a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 161da63de55SLois Curfman McInnes #endif 16277c4ece6SBarry Smith 16377c4ece6SBarry Smith #if defined (HAVE_MPE) 16477c4ece6SBarry Smith #include "mpe.h" 165614700edSBarry Smith #define MPEBEGIN 1000 166cf256101SBarry Smith extern int PLogMPEBegin(void); 16777c4ece6SBarry Smith extern int PLogMPEDump(char *); 168614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 169614700edSBarry Smith extern int PLogEventMPEActivate(int); 170905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 171614700edSBarry Smith #else 172c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 173c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 17477c4ece6SBarry Smith #endif 17577c4ece6SBarry Smith 176614700edSBarry Smith extern int PLogEventActivate(int); 177905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 178614700edSBarry Smith 1793e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1803e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 181614700edSBarry Smith 182614700edSBarry Smith extern int PLogEventFlags[]; 183b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 184b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 185b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 186b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 18777c4ece6SBarry Smith 18877c4ece6SBarry Smith #if defined(HAVE_MPE) 189005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 190005c665bSBarry Smith { \ 191005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) { \ 192005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 193005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 194005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 195005c665bSBarry Smith MPI_Barrier(cm); \ 196005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 197005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 198005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 199005c665bSBarry Smith } \ 200005c665bSBarry Smith PLogEventBegin(e+1,o1,o2,o3,o4); \ 201005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 202005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 203005c665bSBarry Smith } 204a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 20556cd22aeSBarry Smith { \ 206005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 207005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 208005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 209005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 21077c4ece6SBarry Smith } 21177c4ece6SBarry Smith #else 212005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 213005c665bSBarry Smith { \ 214005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) { \ 215005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 216005c665bSBarry Smith MPI_Barrier(cm); \ 217005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 218005c665bSBarry Smith } \ 219005c665bSBarry Smith PLogEventBegin((e)+1,o1,o2,o3,o4); \ 220005c665bSBarry Smith } 221a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 22256cd22aeSBarry Smith { \ 223005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 224005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 22577c4ece6SBarry Smith } 22677c4ece6SBarry Smith #endif 22777c4ece6SBarry Smith 22877c4ece6SBarry Smith #if defined(HAVE_MPE) 229005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 230005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) \ 231005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 232005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 233005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\ 234005c665bSBarry Smith } 23577c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 236005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 237005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 238005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 239005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\ 240a1b5d808SSatish Balay } 24177c4ece6SBarry Smith #else 242005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 243005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) \ 244005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 245005c665bSBarry Smith } 24677c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 247005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 248005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 249a1b5d808SSatish Balay } 25077c4ece6SBarry Smith #endif 25177c4ece6SBarry Smith 25277c4ece6SBarry Smith 2533a40ed3dSBarry Smith #define PLogObjectParent(p,c) if (c) {PetscValidHeader((PetscObject)(c)); \ 2543a40ed3dSBarry Smith PetscValidHeader((PetscObject)(p));\ 2553a40ed3dSBarry Smith ((PetscObject)(c))->parent = (PetscObject) (p);} 25677c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 25777c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 258b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 259b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 26077c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 26177c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 26277c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 263cf256101SBarry Smith extern int PLogDestroy(void); 26477c4ece6SBarry Smith extern int PLogStagePush(int); 265*1d508c8cSSatish Balay extern int PLogStagePop(void); 26677c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 2673044e3d5SSatish Balay extern int PLogPrintSummary(MPI_Comm,char *); 268*1d508c8cSSatish Balay extern int PLogBegin(void); 269bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 270*1d508c8cSSatish Balay extern int PLogAllBegin(void); 271bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 272bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 273edde42fcSLois Curfman McInnes extern int PLogDump(char*); 274edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 275*1d508c8cSSatish Balay extern PLogDouble PetscGetFlops(void); 27677c4ece6SBarry Smith 27747794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 27847794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 27947794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 280ca161407SBarry Smith extern int PETSC_DUMMY,PETSC_DUMMY_SIZE; 281ca161407SBarry Smith 282ce85283eSBarry Smith /* 28384cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 284ce85283eSBarry Smith uses macros to defined the MPI operations. 28515308354SBarry Smith 28615308354SBarry Smith It does not work correctly from HP-UX because it processes the 28715308354SBarry Smith macros in a way that sometimes it double counts. 2887c1e34a4SSatish Balay 2897c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 290ce85283eSBarry Smith */ 291a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt) 29277a39924SBarry Smith /* 29377a39924SBarry Smith Logging of MPI activities 29477a39924SBarry Smith */ 29577a39924SBarry Smith 29677a39924SBarry Smith #define TypeSize(buff,count,type) \ 297ca161407SBarry Smith ( \ 298ca161407SBarry Smith MPI_Type_size(type,&PETSC_DUMMY_SIZE), buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \ 299ca161407SBarry Smith ) 30077a39924SBarry Smith 30177a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 302ca161407SBarry Smith ( \ 303ca161407SBarry Smith PETSC_DUMMY = MPI_Irecv( buf, count, datatype, source, tag, comm, request), \ 304ca161407SBarry Smith irecv_ct++, TypeSize(irecv_len,count,datatype),PETSC_DUMMY \ 305ca161407SBarry Smith ) 30615308354SBarry Smith 30777a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 308ca161407SBarry Smith ( \ 309ca161407SBarry Smith PETSC_DUMMY = MPI_Isend( buf, count, datatype, dest, tag, comm, request), \ 310ca161407SBarry Smith isend_ct++, TypeSize(isend_len,count,datatype),PETSC_DUMMY \ 311ca161407SBarry Smith ) 31215308354SBarry Smith 3130d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 314ca161407SBarry Smith ( \ 315ca161407SBarry Smith PETSC_DUMMY = MPI_Startall( number, requests), \ 316ca161407SBarry Smith irecv_ct += (PLogDouble)(number), irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 317ca161407SBarry Smith ) 3180d4b0b6cSBarry Smith 3190d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 320ca161407SBarry Smith ( \ 321ca161407SBarry Smith PETSC_DUMMY = MPI_Startall( number, requests), \ 322ca161407SBarry Smith isend_ct += (PLogDouble)(number), isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \ 323ca161407SBarry Smith ) 3240d4b0b6cSBarry Smith 3250d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests)\ 326ca161407SBarry Smith (\ 327ca161407SBarry Smith PETSC_DUMMY = MPI_Start( requests),\ 328ca161407SBarry Smith isend_ct++, isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\ 329ca161407SBarry Smith ) 3300d4b0b6cSBarry Smith 331ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 332ca161407SBarry Smith ( \ 333ca161407SBarry Smith PETSC_DUMMY = MPI_Recv( buf, count, datatype, source, tag, comm, status), \ 334ca161407SBarry Smith recv_ct++, TypeSize(recv_len,count,datatype), PETSC_DUMMY \ 335ca161407SBarry Smith ) 33615308354SBarry Smith 33777a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 338ca161407SBarry Smith ( \ 339ca161407SBarry Smith PETSC_DUMMY = MPI_Send( buf, count, datatype, dest, tag, comm), \ 340ca161407SBarry Smith send_ct++, TypeSize(send_len,count,datatype),PETSC_DUMMY \ 341ca161407SBarry Smith ) 34277a39924SBarry Smith 34377a39924SBarry Smith #define MPI_Wait(request, status) \ 34477a39924SBarry Smith ( \ 345e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 34677a39924SBarry Smith MPI_Wait(request, status) \ 34777a39924SBarry Smith ) 34877a39924SBarry Smith 34977a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 35077a39924SBarry Smith ( \ 351e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 35277a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 35377a39924SBarry Smith ) 35477a39924SBarry Smith 35577a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 35677a39924SBarry Smith ( \ 35747794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 35877a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 35977a39924SBarry Smith ) 36077a39924SBarry Smith 36177a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 362005c665bSBarry Smith (allreduce_ct++,MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm)) 3633914022bSBarry Smith 3640d4b0b6cSBarry Smith #else 3650d4b0b6cSBarry Smith 3660d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 367ca161407SBarry Smith ( \ 368ca161407SBarry Smith MPI_Startall( number, requests) \ 369ca161407SBarry Smith ) 3700d4b0b6cSBarry Smith 3710d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 372ca161407SBarry Smith ( \ 373ca161407SBarry Smith MPI_Startall( number, requests) \ 374ca161407SBarry Smith ) 3750d4b0b6cSBarry Smith 3760d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 377ca161407SBarry Smith ( \ 378ca161407SBarry Smith MPI_Start( requests) \ 379ca161407SBarry Smith ) 3800d4b0b6cSBarry Smith 38115308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 382614700edSBarry Smith 383df8cf0b5SBarry Smith #else /* ---Logging is turned off --------------------------------------------*/ 384614700edSBarry Smith 385614700edSBarry Smith #define PLogFlops(n) 386614700edSBarry Smith 387df8cf0b5SBarry Smith /* 388df8cf0b5SBarry Smith With logging turned off, then MPE has to be turned off 389df8cf0b5SBarry Smith */ 390614700edSBarry Smith #define MPEBEGIN 1000 391df8cf0b5SBarry Smith #define PLogMPEBegin() 392df8cf0b5SBarry Smith #define PLogMPEDump(a) 393bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 394bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 395614700edSBarry Smith 396bf343e40SBarry Smith #define PLogEventActivate(a) 0 397bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 398614700edSBarry Smith 399bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 400bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 40177c4ece6SBarry Smith 402b3bbe94bSBarry Smith #define _PLogPLB 0 403b3bbe94bSBarry Smith #define _PLogPLE 0 404b3bbe94bSBarry Smith #define _PLogPHC 0 405b3bbe94bSBarry Smith #define _PLogPHD 0 406a5558d3fSBarry Smith #define PetscGetFlops() 0.0 407d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 408d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 409005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 410005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) 411d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 412d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 413d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 414d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 415d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 416d7a720efSLois Curfman McInnes #define PLogDestroy() 417bf343e40SBarry Smith #define PLogStagePush(a) 418d7a720efSLois Curfman McInnes #define PLogStagePop() 419d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 420d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 421d7a720efSLois Curfman McInnes #define PLogBegin() 422974088aaSSatish Balay #define PLogTraceBegin(file) 0 423bc1211c7SBarry Smith #define PLogSet(lb,le) 424d7a720efSLois Curfman McInnes #define PLogAllBegin() 425d7a720efSLois Curfman McInnes #define PLogDump(char) 426dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 427d7a720efSLois Curfman McInnes #define PLogMPEBegin() 428d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 4297f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 430ce6058e1SBarry Smith 4313a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */ 432ca161407SBarry Smith #define MPI_Startall_irecv( count,number,requests) MPI_Startall( number, requests) 433ce6058e1SBarry Smith 434ca161407SBarry Smith #define MPI_Startall_isend( count,number,requests) MPI_Startall( number, requests) 435ce6058e1SBarry Smith 436ca161407SBarry Smith #define MPI_Start_isend(count, requests) MPI_Start( requests) 437ca161407SBarry Smith 4383a40ed3dSBarry Smith #endif /* USE_PETSC_LOG */ 4396daaf66cSBarry Smith 4408b6d568bSLois Curfman McInnes /*MC 44119b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 44219b02663SBarry Smith 44319b02663SBarry Smith Input Parameter: 44419b02663SBarry Smith . f - flop counter 44519b02663SBarry Smith 44619b02663SBarry Smith Synopsis: 447682ac3c9SWilliam Gropp void PLogFlops(int f) 44819b02663SBarry Smith 44919b02663SBarry Smith Notes: 45019b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 45119b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 45219b02663SBarry Smith application code. 45319b02663SBarry Smith 45419b02663SBarry Smith PETSc automatically logs library events if the code has been 4553a40ed3dSBarry Smith compiled with -DUSE_PETSC_LOG (which is the default), and -log, 45619b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 45719b02663SBarry Smith intended for logging user flops to supplement this PETSc 45819b02663SBarry Smith information. 45919b02663SBarry Smith 46019b02663SBarry Smith Example of Usage: 46135aab85fSBarry Smith $ int USER_EVENT; 462b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 46319b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 46419b02663SBarry Smith $ [code segment to monitor] 46519b02663SBarry Smith $ PLogFlops(user_flops) 46619b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 46719b02663SBarry Smith 46858cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 46919b02663SBarry Smith 470edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 47119b02663SBarry Smith M*/ 47219b02663SBarry Smith 47397bb86f7SLois Curfman McInnes 474d7a720efSLois Curfman McInnes /*MC 47519b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 47697bb86f7SLois Curfman McInnes 47797bb86f7SLois Curfman McInnes Input Parameters: 47835aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 47997bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 48097bb86f7SLois Curfman McInnes 48197bb86f7SLois Curfman McInnes Synopsis: 482682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 48397bb86f7SLois Curfman McInnes PetscObject o4) 48497bb86f7SLois Curfman McInnes 48597bb86f7SLois Curfman McInnes Notes: 48697bb86f7SLois Curfman McInnes You should also register each integer event with the command 48797bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 4883a40ed3dSBarry Smith -DUSE_PETSC_LOG, which is the default. 48997bb86f7SLois Curfman McInnes 49097bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 4913a40ed3dSBarry Smith compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are 49297bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 49397bb86f7SLois Curfman McInnes to supplement this PETSc information. 49497bb86f7SLois Curfman McInnes 49597bb86f7SLois Curfman McInnes Example of Usage: 49635aab85fSBarry Smith $ int USER_EVENT; 4970eb211faSLois Curfman McInnes $ int user_event_flops; 498b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 49935aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 50097bb86f7SLois Curfman McInnes $ [code segment to monitor] 5010eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 50235aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 50397bb86f7SLois Curfman McInnes 50497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 50597bb86f7SLois Curfman McInnes 50697bb86f7SLois Curfman McInnes .keywords: log, event, begin 50797bb86f7SLois Curfman McInnes M*/ 50897bb86f7SLois Curfman McInnes 509d7a720efSLois Curfman McInnes /*MC 51019b02663SBarry Smith PLogEventEnd - Log the end of a user event. 51197bb86f7SLois Curfman McInnes 51297bb86f7SLois Curfman McInnes Input Parameters: 51335aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 51497bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 51597bb86f7SLois Curfman McInnes 51697bb86f7SLois Curfman McInnes Synopsis: 517682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 51897bb86f7SLois Curfman McInnes PetscObject o4) 51997bb86f7SLois Curfman McInnes 52097bb86f7SLois Curfman McInnes Notes: 521b951964fSBarry Smith You should also register each additional integer event with the command 52297bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 5233a40ed3dSBarry Smith -DUSE_PETSC_LOG, which is the default. 52497bb86f7SLois Curfman McInnes 52597bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 5263a40ed3dSBarry Smith compiled with -DUSE_PETSC_LOG, and -log, -log_summary, or -log_all are 52797bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 52897bb86f7SLois Curfman McInnes to supplement this PETSc information. 52997bb86f7SLois Curfman McInnes 53097bb86f7SLois Curfman McInnes Example of Usage: 53135aab85fSBarry Smith $ int USER_EVENT; 5320eb211faSLois Curfman McInnes $ int user_event_flops; 533b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 53497bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 53597bb86f7SLois Curfman McInnes $ [code segment to monitor] 5360eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 53797bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 53897bb86f7SLois Curfman McInnes 53997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 54097bb86f7SLois Curfman McInnes 54197bb86f7SLois Curfman McInnes .keywords: log, event, end 54297bb86f7SLois Curfman McInnes M*/ 54397bb86f7SLois Curfman McInnes 544005c665bSBarry Smith /*MC 545005c665bSBarry Smith PLogEventBarrierBegin - Logs the time in a barrier before an event. 546005c665bSBarry Smith 547005c665bSBarry Smith Input Parameters: 548005c665bSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 549005c665bSBarry Smith . o1,o2,o3,o4 - objects associated with the event, or 0 550005c665bSBarry Smith . comm - communicator the barrier takes place over 551005c665bSBarry Smith 552005c665bSBarry Smith Synopsis: 553005c665bSBarry Smith void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 554005c665bSBarry Smith PetscObject o4,MPI_Comm comm) 555005c665bSBarry Smith 556005c665bSBarry Smith Notes: 557005c665bSBarry Smith This is for logging the amount of time spent in a barrier for an event 558005c665bSBarry Smith that requires synchronization. 559005c665bSBarry Smith 560005c665bSBarry Smith Example of Usage: 561005c665bSBarry Smith $ PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm); 562005c665bSBarry Smith $ MPI_Allreduce() 563005c665bSBarry Smith $ PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm); 564005c665bSBarry Smith 565005c665bSBarry Smith Additional Notes: 566005c665bSBarry Smith Synchronization events always come in pairs; for example, VEC_NormBarrier and 567005c665bSBarry Smith VEC_NormComm = VEC_NormBarrier + 1 568005c665bSBarry Smith 569005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(), 570005c665bSBarry Smith PLogEventBarrierEnd() 571005c665bSBarry Smith 572005c665bSBarry Smith .keywords: log, event, begin, barrier 573005c665bSBarry Smith M*/ 574005c665bSBarry Smith 575005c665bSBarry Smith /*MC 576005c665bSBarry Smith PLogEventBarrierEnd - Logs the time in a barrier before an event. 577005c665bSBarry Smith 578005c665bSBarry Smith Input Parameters: 579005c665bSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 580005c665bSBarry Smith . o1,o2,o3,o4 - objects associated with the event, or 0 581005c665bSBarry Smith . comm - communicator the barrier takes place over 582005c665bSBarry Smith 583005c665bSBarry Smith Synopsis: 584005c665bSBarry Smith void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 585005c665bSBarry Smith PetscObject o4,MPI_Comm comm) 586005c665bSBarry Smith 587005c665bSBarry Smith Notes: 588005c665bSBarry Smith This is for logging the amount of time spent in a barrier for an event 589005c665bSBarry Smith that requires synchronization. 590005c665bSBarry Smith 591005c665bSBarry Smith Example of Usage: 592005c665bSBarry Smith $ PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm); 593005c665bSBarry Smith $ MPI_Allreduce() 594005c665bSBarry Smith $ PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm); 595005c665bSBarry Smith 596005c665bSBarry Smith Additional Notes: 597005c665bSBarry Smith Synchronization events always come in pairs; for example, VEC_NormBarrier and 598005c665bSBarry Smith VEC_NormComm = VEC_NormBarrier + 1 599005c665bSBarry Smith 600005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(), 601005c665bSBarry Smith PLogEventBarrierBegin() 602005c665bSBarry Smith 603005c665bSBarry Smith .keywords: log, event, begin, barrier 604005c665bSBarry Smith M*/ 605e0937024SBarry Smith 60697bb86f7SLois Curfman McInnes #endif 60741debaddSBarry Smith 60877c4ece6SBarry Smith 60977c4ece6SBarry Smith 61084cb2905SBarry Smith 61184cb2905SBarry Smith 61284cb2905SBarry Smith 613