1*df8cf0b5SBarry Smith /* $Id: petsclog.h,v 1.112 1997/09/08 15:00:33 bsmith Exp bsmith $ */ 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 5797bb86f7SLois Curfman McInnes 58005c665bSBarry Smith #define VEC_ScatterBarrier 39 594dcbc457SBarry Smith #define VEC_Dot 40 604dcbc457SBarry Smith #define VEC_Norm 41 614dcbc457SBarry Smith #define VEC_Max 42 624dcbc457SBarry Smith #define VEC_Min 43 634dcbc457SBarry Smith #define VEC_TDot 44 644dcbc457SBarry Smith #define VEC_Scale 45 654dcbc457SBarry Smith #define VEC_Copy 46 664dcbc457SBarry Smith #define VEC_Set 47 674dcbc457SBarry Smith #define VEC_AXPY 48 684dcbc457SBarry Smith #define VEC_AYPX 49 694dcbc457SBarry Smith #define VEC_Swap 50 704dcbc457SBarry Smith #define VEC_WAXPY 51 714dcbc457SBarry Smith #define VEC_AssemblyBegin 52 724dcbc457SBarry Smith #define VEC_AssemblyEnd 53 734dcbc457SBarry Smith #define VEC_MTDot 54 744dcbc457SBarry Smith #define VEC_MDot 55 754dcbc457SBarry Smith #define VEC_MAXPY 56 764dcbc457SBarry Smith #define VEC_PMult 57 774dcbc457SBarry Smith #define VEC_SetValues 58 784dcbc457SBarry Smith #define VEC_Load 59 794dcbc457SBarry Smith #define VEC_View 60 804dcbc457SBarry Smith #define VEC_ScatterBegin 61 814dcbc457SBarry Smith #define VEC_ScatterEnd 62 82bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 8397bb86f7SLois Curfman McInnes 84005c665bSBarry Smith #define VEC_NormBarrier 64 85005c665bSBarry Smith #define VEC_NormComm 65 86005c665bSBarry Smith #define VEC_DotBarrier 66 87005c665bSBarry Smith #define VEC_DotComm 67 88005c665bSBarry Smith #define VEC_MDotBarrier 68 89005c665bSBarry Smith #define VEC_MDotComm 69 90005c665bSBarry Smith 914dcbc457SBarry Smith #define SLES_Solve 70 924dcbc457SBarry Smith #define SLES_SetUp 71 9397bb86f7SLois Curfman McInnes 944dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 9597bb86f7SLois Curfman McInnes 961bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices 74 974dcbc457SBarry Smith #define PC_SetUp 75 9836058207SBarry Smith #define PC_SetUpOnBlocks 76 9932284f49SSatish Balay #define PC_Apply 77 100614700edSBarry Smith #define PC_ApplySymmetricLeft 78 101614700edSBarry Smith #define PC_ApplySymmetricRight 79 1024dcbc457SBarry Smith 1034dcbc457SBarry Smith #define SNES_Solve 80 1044dcbc457SBarry Smith #define SNES_LineSearch 81 1054dcbc457SBarry Smith #define SNES_FunctionEval 82 1064dcbc457SBarry Smith #define SNES_JacobianEval 83 1074dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 1084dcbc457SBarry Smith #define SNES_GradientEval 85 1094dcbc457SBarry Smith #define SNES_HessianEval 86 1104dcbc457SBarry Smith 111682d7d0cSBarry Smith #define TS_Step 90 112bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 11372936c9dSBarry Smith 11472936c9dSBarry Smith #define Petsc_Barrier 100 11555206aebSLois Curfman McInnes 1160513a670SBarry Smith #define EC_SetUp 105 1170513a670SBarry Smith #define EC_Solve 106 1180513a670SBarry Smith 11955206aebSLois Curfman McInnes #define DFVec_RefineVector 110 12055206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 12155206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 12255206aebSLois Curfman McInnes #define DFVec_DrawContours 113 12355206aebSLois Curfman McInnes 12441debaddSBarry Smith /* 125b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 12677c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 127b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 12841debaddSBarry Smith */ 12935aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1304dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 13197bb86f7SLois Curfman McInnes 13219b02663SBarry Smith /* Global flop counter */ 13347794344SBarry Smith extern PLogDouble _TotalFlops; 13419b02663SBarry Smith 135edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 13694a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 137cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 138614700edSBarry Smith extern int PLogInfoActivateClass(int); 13943a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 140614700edSBarry Smith 141*df8cf0b5SBarry Smith #if defined(PETSC_LOG) /* --- Logging is turned on --------------------------------*/ 142614700edSBarry Smith 143a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 14477c4ece6SBarry Smith 14577c4ece6SBarry Smith #if defined (HAVE_MPE) 14677c4ece6SBarry Smith #include "mpe.h" 147614700edSBarry Smith #define MPEBEGIN 1000 14877c4ece6SBarry Smith extern int PLogMPEBegin(); 14977c4ece6SBarry Smith extern int PLogMPEDump(char *); 150614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 151614700edSBarry Smith extern int PLogEventMPEActivate(int); 152905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 153614700edSBarry Smith #else 154c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 155c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 15677c4ece6SBarry Smith #endif 15777c4ece6SBarry Smith 158614700edSBarry Smith extern int PLogEventActivate(int); 159905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 160614700edSBarry Smith 1613e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1623e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 163614700edSBarry Smith 164614700edSBarry Smith extern int PLogEventFlags[]; 165b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 166b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 167b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 168b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 16977c4ece6SBarry Smith 17077c4ece6SBarry Smith #if defined(HAVE_MPE) 171005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \ 172005c665bSBarry Smith { \ 173005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) { \ 174005c665bSBarry Smith PLogEventBegin((e),o1,o2,o3,o4); \ 175005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 176005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 177005c665bSBarry Smith MPI_Barrier(cm); \ 178005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 179005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 180005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 181005c665bSBarry Smith } \ 182005c665bSBarry Smith PLogEventBegin(e+1,o1,o2,o3,o4); \ 183005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 184005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\ 185005c665bSBarry Smith } 186a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 18756cd22aeSBarry Smith { \ 188005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 189005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 190005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 191005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e),0,"");\ 19277c4ece6SBarry Smith } 19377c4ece6SBarry Smith #else 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 MPI_Barrier(cm); \ 199005c665bSBarry Smith PLogEventEnd((e),o1,o2,o3,o4); \ 200005c665bSBarry Smith } \ 201005c665bSBarry Smith PLogEventBegin((e)+1,o1,o2,o3,o4); \ 202005c665bSBarry Smith } 203a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 20456cd22aeSBarry Smith { \ 205005c665bSBarry Smith if (_PLogPLB && PLogEventFlags[(e)]) \ 206005c665bSBarry Smith (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 20777c4ece6SBarry Smith } 20877c4ece6SBarry Smith #endif 20977c4ece6SBarry Smith 21077c4ece6SBarry Smith #if defined(HAVE_MPE) 211005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 212005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) \ 213005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 214005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)+1])\ 215005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\ 216005c665bSBarry Smith } 21777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 218005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 219005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 220005c665bSBarry Smith if (UseMPE && PLogEventMPEFlags[(e)])\ 221005c665bSBarry Smith MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\ 222a1b5d808SSatish Balay } 22377c4ece6SBarry Smith #else 224005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\ 225005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)+1]) \ 226005c665bSBarry Smith (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 227005c665bSBarry Smith } 22877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 229005c665bSBarry Smith if (_PLogPLE && PLogEventFlags[(e)]) \ 230005c665bSBarry Smith (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 231a1b5d808SSatish Balay } 23277c4ece6SBarry Smith #endif 23377c4ece6SBarry Smith 23477c4ece6SBarry Smith 23577c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 23677c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 23777c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 23877c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 23977c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 240b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 241b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 24277c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 24377c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 24477c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 24577c4ece6SBarry Smith extern int PLogDestroy(); 24677c4ece6SBarry Smith extern int PLogStagePush(int); 24777c4ece6SBarry Smith extern int PLogStagePop(); 24877c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 2493044e3d5SSatish Balay extern int PLogPrintSummary(MPI_Comm,char *); 250edde42fcSLois Curfman McInnes extern int PLogBegin(); 251bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 252edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 253bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 254bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 255edde42fcSLois Curfman McInnes extern int PLogDump(char*); 256edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 25747794344SBarry Smith extern PLogDouble PetscGetFlops(); 25877c4ece6SBarry Smith 25947794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 26047794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 26147794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 262ce85283eSBarry Smith /* 26384cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 264ce85283eSBarry Smith uses macros to defined the MPI operations. 26515308354SBarry Smith 26615308354SBarry Smith It does not work correctly from HP-UX because it processes the 26715308354SBarry Smith macros in a way that sometimes it double counts. 2687c1e34a4SSatish Balay 2697c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 270ce85283eSBarry Smith */ 271a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt) 27277a39924SBarry Smith /* 27377a39924SBarry Smith Logging of MPI activities 27477a39924SBarry Smith */ 27577a39924SBarry Smith 27677a39924SBarry Smith #define TypeSize(buff,count,type) \ 27777a39924SBarry Smith { \ 27877a39924SBarry Smith if (type == MPIU_SCALAR) { \ 27947794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(Scalar)); \ 28077a39924SBarry Smith } else if (type == MPI_INT) { \ 28147794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(int)); \ 28277a39924SBarry Smith } else { \ 28347794344SBarry Smith int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \ 28477a39924SBarry Smith } \ 28577a39924SBarry Smith } 28677a39924SBarry Smith 28777a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 28877a39924SBarry Smith { \ 28977a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request); \ 29077a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 29177a39924SBarry Smith } 29215308354SBarry Smith 29377a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 29477a39924SBarry Smith { \ 29577a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 296e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 29777a39924SBarry Smith } 29815308354SBarry Smith 2990d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3000d4b0b6cSBarry Smith { \ 3010d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 30247794344SBarry Smith irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \ 3030d4b0b6cSBarry Smith } 3040d4b0b6cSBarry Smith 3050d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3060d4b0b6cSBarry Smith { \ 3070d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 30847794344SBarry Smith isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 3090d4b0b6cSBarry Smith } 3100d4b0b6cSBarry Smith 3110d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3120d4b0b6cSBarry Smith { \ 3130d4b0b6cSBarry Smith MPI_Start( requests); \ 31447794344SBarry Smith isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 3150d4b0b6cSBarry Smith } 3160d4b0b6cSBarry Smith 317ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 318ce85283eSBarry Smith { \ 319ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 320ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 321ce85283eSBarry Smith } 32215308354SBarry Smith 32377a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 32477a39924SBarry Smith { \ 32577a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 326e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 32777a39924SBarry Smith } 32877a39924SBarry Smith 32977a39924SBarry Smith #define MPI_Wait(request, status) \ 33077a39924SBarry Smith ( \ 331e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 33277a39924SBarry Smith MPI_Wait(request, status) \ 33377a39924SBarry Smith ) 33477a39924SBarry Smith 33577a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 33677a39924SBarry Smith ( \ 337e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 33877a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 33977a39924SBarry Smith ) 34077a39924SBarry Smith 34177a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 34277a39924SBarry Smith ( \ 34347794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 34477a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 34577a39924SBarry Smith ) 34677a39924SBarry Smith 34777a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 348005c665bSBarry Smith (allreduce_ct++,MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm)) 3493914022bSBarry Smith 3500d4b0b6cSBarry Smith #else 3510d4b0b6cSBarry Smith 3520d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3530d4b0b6cSBarry Smith { \ 3540d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3550d4b0b6cSBarry Smith } 3560d4b0b6cSBarry Smith 3570d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3580d4b0b6cSBarry Smith { \ 3590d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3600d4b0b6cSBarry Smith } 3610d4b0b6cSBarry Smith 3620d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3630d4b0b6cSBarry Smith { \ 3640d4b0b6cSBarry Smith MPI_Start( requests); \ 3650d4b0b6cSBarry Smith } 3660d4b0b6cSBarry Smith 36715308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 368614700edSBarry Smith 369*df8cf0b5SBarry Smith #else /* ---Logging is turned off --------------------------------------------*/ 370614700edSBarry Smith 371614700edSBarry Smith #define PLogFlops(n) 372614700edSBarry Smith 373*df8cf0b5SBarry Smith /* 374*df8cf0b5SBarry Smith With logging turned off, then MPE has to be turned off 375*df8cf0b5SBarry Smith */ 376614700edSBarry Smith #define MPEBEGIN 1000 377*df8cf0b5SBarry Smith #define PLogMPEBegin() 378*df8cf0b5SBarry Smith #define PLogMPEDump(a) 379bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 380bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 381614700edSBarry Smith 382bf343e40SBarry Smith #define PLogEventActivate(a) 0 383bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 384614700edSBarry Smith 385bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 386bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 38777c4ece6SBarry Smith 388b3bbe94bSBarry Smith #define _PLogPLB 0 389b3bbe94bSBarry Smith #define _PLogPLE 0 390b3bbe94bSBarry Smith #define _PLogPHC 0 391b3bbe94bSBarry Smith #define _PLogPHD 0 392a5558d3fSBarry Smith #define PetscGetFlops() 0.0 393d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 394d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 395005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 396005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) 397d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 398d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 399d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 400d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 401d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 402d7a720efSLois Curfman McInnes #define PLogDestroy() 403bf343e40SBarry Smith #define PLogStagePush(a) 404d7a720efSLois Curfman McInnes #define PLogStagePop() 405d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 406d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 407d7a720efSLois Curfman McInnes #define PLogBegin() 408974088aaSSatish Balay #define PLogTraceBegin(file) 0 409bc1211c7SBarry Smith #define PLogSet(lb,le) 410d7a720efSLois Curfman McInnes #define PLogAllBegin() 411d7a720efSLois Curfman McInnes #define PLogDump(char) 412dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 413d7a720efSLois Curfman McInnes #define PLogMPEBegin() 414d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 4157f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 416ce6058e1SBarry Smith 417ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */ 418ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 419ce6058e1SBarry Smith { \ 420ce6058e1SBarry Smith MPI_Startall( number, requests); \ 421ce6058e1SBarry Smith } 422ce6058e1SBarry Smith 423ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \ 424ce6058e1SBarry Smith { \ 425ce6058e1SBarry Smith MPI_Startall( number, requests); \ 426ce6058e1SBarry Smith } 427ce6058e1SBarry Smith 428ce6058e1SBarry Smith #define MPI_Start_isend(count, requests) \ 429ce6058e1SBarry Smith { \ 430ce6058e1SBarry Smith MPI_Start( requests); \ 431ce6058e1SBarry Smith } 432ce6058e1SBarry Smith #endif /* PETSC_LOG */ 4336daaf66cSBarry Smith 4348b6d568bSLois Curfman McInnes /*MC 43519b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 43619b02663SBarry Smith 43719b02663SBarry Smith Input Parameter: 43819b02663SBarry Smith . f - flop counter 43919b02663SBarry Smith 44019b02663SBarry Smith Synopsis: 441682ac3c9SWilliam Gropp void PLogFlops(int f) 44219b02663SBarry Smith 44319b02663SBarry Smith Notes: 44419b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 44519b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 44619b02663SBarry Smith application code. 44719b02663SBarry Smith 44819b02663SBarry Smith PETSc automatically logs library events if the code has been 44919b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 45019b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 45119b02663SBarry Smith intended for logging user flops to supplement this PETSc 45219b02663SBarry Smith information. 45319b02663SBarry Smith 45419b02663SBarry Smith Example of Usage: 45535aab85fSBarry Smith $ int USER_EVENT; 456b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 45719b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 45819b02663SBarry Smith $ [code segment to monitor] 45919b02663SBarry Smith $ PLogFlops(user_flops) 46019b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 46119b02663SBarry Smith 46258cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 46319b02663SBarry Smith 464edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 46519b02663SBarry Smith M*/ 46619b02663SBarry Smith 46797bb86f7SLois Curfman McInnes 468d7a720efSLois Curfman McInnes /*MC 46919b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 47097bb86f7SLois Curfman McInnes 47197bb86f7SLois Curfman McInnes Input Parameters: 47235aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 47397bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 47497bb86f7SLois Curfman McInnes 47597bb86f7SLois Curfman McInnes Synopsis: 476682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 47797bb86f7SLois Curfman McInnes PetscObject o4) 47897bb86f7SLois Curfman McInnes 47997bb86f7SLois Curfman McInnes Notes: 48097bb86f7SLois Curfman McInnes You should also register each integer event with the command 48197bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 48297bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 48397bb86f7SLois Curfman McInnes 48497bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 48597bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 48697bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 48797bb86f7SLois Curfman McInnes to supplement this PETSc information. 48897bb86f7SLois Curfman McInnes 48997bb86f7SLois Curfman McInnes Example of Usage: 49035aab85fSBarry Smith $ int USER_EVENT; 4910eb211faSLois Curfman McInnes $ int user_event_flops; 492b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 49335aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 49497bb86f7SLois Curfman McInnes $ [code segment to monitor] 4950eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 49635aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 49797bb86f7SLois Curfman McInnes 49897bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 49997bb86f7SLois Curfman McInnes 50097bb86f7SLois Curfman McInnes .keywords: log, event, begin 50197bb86f7SLois Curfman McInnes M*/ 50297bb86f7SLois Curfman McInnes 503d7a720efSLois Curfman McInnes /*MC 50419b02663SBarry Smith PLogEventEnd - Log the end of a user event. 50597bb86f7SLois Curfman McInnes 50697bb86f7SLois Curfman McInnes Input Parameters: 50735aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 50897bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 50997bb86f7SLois Curfman McInnes 51097bb86f7SLois Curfman McInnes Synopsis: 511682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 51297bb86f7SLois Curfman McInnes PetscObject o4) 51397bb86f7SLois Curfman McInnes 51497bb86f7SLois Curfman McInnes Notes: 515b951964fSBarry Smith You should also register each additional integer event with the command 51697bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 51797bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 51897bb86f7SLois Curfman McInnes 51997bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 52097bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 52197bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 52297bb86f7SLois Curfman McInnes to supplement this PETSc information. 52397bb86f7SLois Curfman McInnes 52497bb86f7SLois Curfman McInnes Example of Usage: 52535aab85fSBarry Smith $ int USER_EVENT; 5260eb211faSLois Curfman McInnes $ int user_event_flops; 527b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 52897bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 52997bb86f7SLois Curfman McInnes $ [code segment to monitor] 5300eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 53197bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 53297bb86f7SLois Curfman McInnes 53397bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 53497bb86f7SLois Curfman McInnes 53597bb86f7SLois Curfman McInnes .keywords: log, event, end 53697bb86f7SLois Curfman McInnes M*/ 53797bb86f7SLois Curfman McInnes 538005c665bSBarry Smith /*MC 539005c665bSBarry Smith PLogEventBarrierBegin - Logs the time in a barrier before an event. 540005c665bSBarry Smith 541005c665bSBarry Smith Input Parameters: 542005c665bSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 543005c665bSBarry Smith . o1,o2,o3,o4 - objects associated with the event, or 0 544005c665bSBarry Smith . comm - communicator the barrier takes place over 545005c665bSBarry Smith 546005c665bSBarry Smith Synopsis: 547005c665bSBarry Smith void PLogEventBarrierBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 548005c665bSBarry Smith PetscObject o4,MPI_Comm comm) 549005c665bSBarry Smith 550005c665bSBarry Smith Notes: 551005c665bSBarry Smith This is for logging the amount of time spent in a barrier for an event 552005c665bSBarry Smith that requires synchronization. 553005c665bSBarry Smith 554005c665bSBarry Smith Example of Usage: 555005c665bSBarry Smith $ PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm); 556005c665bSBarry Smith $ MPI_Allreduce() 557005c665bSBarry Smith $ PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm); 558005c665bSBarry Smith 559005c665bSBarry Smith Additional Notes: 560005c665bSBarry Smith Synchronization events always come in pairs; for example, VEC_NormBarrier and 561005c665bSBarry Smith VEC_NormComm = VEC_NormBarrier + 1 562005c665bSBarry Smith 563005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(), 564005c665bSBarry Smith PLogEventBarrierEnd() 565005c665bSBarry Smith 566005c665bSBarry Smith .keywords: log, event, begin, barrier 567005c665bSBarry Smith M*/ 568005c665bSBarry Smith 569005c665bSBarry Smith /*MC 570005c665bSBarry Smith PLogEventBarrierEnd - Logs the time in a barrier before an event. 571005c665bSBarry Smith 572005c665bSBarry Smith Input Parameters: 573005c665bSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 574005c665bSBarry Smith . o1,o2,o3,o4 - objects associated with the event, or 0 575005c665bSBarry Smith . comm - communicator the barrier takes place over 576005c665bSBarry Smith 577005c665bSBarry Smith Synopsis: 578005c665bSBarry Smith void PLogEventBarrierEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 579005c665bSBarry Smith PetscObject o4,MPI_Comm comm) 580005c665bSBarry Smith 581005c665bSBarry Smith Notes: 582005c665bSBarry Smith This is for logging the amount of time spent in a barrier for an event 583005c665bSBarry Smith that requires synchronization. 584005c665bSBarry Smith 585005c665bSBarry Smith Example of Usage: 586005c665bSBarry Smith $ PLogEventBarrierBegin(VEC_NormBarrier,0,0,0,0,comm); 587005c665bSBarry Smith $ MPI_Allreduce() 588005c665bSBarry Smith $ PLogEventBarrierEnd(VEC_NormBarrier,0,0,0,0,comm); 589005c665bSBarry Smith 590005c665bSBarry Smith Additional Notes: 591005c665bSBarry Smith Synchronization events always come in pairs; for example, VEC_NormBarrier and 592005c665bSBarry Smith VEC_NormComm = VEC_NormBarrier + 1 593005c665bSBarry Smith 594005c665bSBarry Smith .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops(), PLogEventBegin(), 595005c665bSBarry Smith PLogEventBarrierBegin() 596005c665bSBarry Smith 597005c665bSBarry Smith .keywords: log, event, begin, barrier 598005c665bSBarry Smith M*/ 599e0937024SBarry Smith 60097bb86f7SLois Curfman McInnes #endif 60141debaddSBarry Smith 60277c4ece6SBarry Smith 60377c4ece6SBarry Smith 60484cb2905SBarry Smith 60584cb2905SBarry Smith 60684cb2905SBarry Smith 607