1*47794344SBarry Smith /* $Id: petsclog.h,v 1.103 1997/03/06 21:38:32 balay 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 11*47794344SBarry Smith typedef double PLogDouble; 12*47794344SBarry Smith 1397bb86f7SLois Curfman McInnes /* 147588ac45SBarry Smith Lists all PETSc events that are logged/profiled. 157588ac45SBarry Smith 16a2ce50c7SBarry Smith If you add an event here, make sure you add it to 17a2ce50c7SBarry Smith petsc/bin/petscview.cfg, 18a2ce50c7SBarry Smith petsc/bin/petscview, 19a2ce50c7SBarry Smith petsc/src/plog/src/plog.c, 20a2ce50c7SBarry Smith petsc/src/plog/src/plogmpe.c and 21e10960a1SSatish Balay petsc/include/FINCLUDE/petsclog.h!!! 2297bb86f7SLois Curfman McInnes */ 2397bb86f7SLois Curfman McInnes #define MAT_Mult 0 241ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult 1 251ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin 2 261ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd 3 271ff317f7SLois Curfman McInnes #define MAT_GetReordering 4 281ff317f7SLois Curfman McInnes #define MAT_MultTrans 5 291ff317f7SLois Curfman McInnes #define MAT_MultAdd 6 301ff317f7SLois Curfman McInnes #define MAT_MultTransAdd 7 311ff317f7SLois Curfman McInnes #define MAT_LUFactor 8 321ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor 9 331ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 10 341ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 11 351ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 12 361ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 13 371ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric 14 381ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 15 391ff317f7SLois Curfman McInnes #define MAT_Relax 16 401ff317f7SLois Curfman McInnes #define MAT_Copy 17 411ff317f7SLois Curfman McInnes #define MAT_Convert 18 421ff317f7SLois Curfman McInnes #define MAT_Scale 19 431ff317f7SLois Curfman McInnes #define MAT_ZeroEntries 20 441ff317f7SLois Curfman McInnes #define MAT_Solve 21 451ff317f7SLois Curfman McInnes #define MAT_SolveAdd 22 461ff317f7SLois Curfman McInnes #define MAT_SolveTrans 23 471ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd 24 481ff317f7SLois Curfman McInnes #define MAT_SetValues 25 491ff317f7SLois Curfman McInnes #define MAT_ForwardSolve 26 501ff317f7SLois Curfman McInnes #define MAT_BackwardSolve 27 511ff317f7SLois Curfman McInnes #define MAT_Load 28 521ff317f7SLois Curfman McInnes #define MAT_View 29 531ff317f7SLois Curfman McInnes #define MAT_ILUFactor 30 543e584e2eSBarry Smith #define MAT_GetColoring 31 551ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices 32 561ff317f7SLois Curfman McInnes #define MAT_GetValues 33 571ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap 34 58dd8bebb4SSatish Balay #define MAT_GetRow 35 5997bb86f7SLois Curfman McInnes 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 854dcbc457SBarry Smith #define SLES_Solve 70 864dcbc457SBarry Smith #define SLES_SetUp 71 8797bb86f7SLois Curfman McInnes 884dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 8997bb86f7SLois Curfman McInnes 901bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices 74 914dcbc457SBarry Smith #define PC_SetUp 75 9236058207SBarry Smith #define PC_SetUpOnBlocks 76 9332284f49SSatish Balay #define PC_Apply 77 94614700edSBarry Smith #define PC_ApplySymmetricLeft 78 95614700edSBarry Smith #define PC_ApplySymmetricRight 79 964dcbc457SBarry Smith 974dcbc457SBarry Smith #define SNES_Solve 80 984dcbc457SBarry Smith #define SNES_LineSearch 81 994dcbc457SBarry Smith #define SNES_FunctionEval 82 1004dcbc457SBarry Smith #define SNES_JacobianEval 83 1014dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 1024dcbc457SBarry Smith #define SNES_GradientEval 85 1034dcbc457SBarry Smith #define SNES_HessianEval 86 1044dcbc457SBarry Smith 105682d7d0cSBarry Smith #define TS_Step 90 106bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 10772936c9dSBarry Smith 10872936c9dSBarry Smith #define Petsc_Barrier 100 10955206aebSLois Curfman McInnes 1100513a670SBarry Smith #define EC_SetUp 105 1110513a670SBarry Smith #define EC_Solve 106 1120513a670SBarry Smith 11355206aebSLois Curfman McInnes #define DFVec_RefineVector 110 11455206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 11555206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 11655206aebSLois Curfman McInnes #define DFVec_DrawContours 113 11755206aebSLois Curfman McInnes 11841debaddSBarry Smith /* 119b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 12077c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 121b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 12241debaddSBarry Smith */ 12335aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1244dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 12597bb86f7SLois Curfman McInnes 12619b02663SBarry Smith /* Global flop counter */ 127*47794344SBarry Smith extern PLogDouble _TotalFlops; 12819b02663SBarry Smith 129edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 13094a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 131cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 132614700edSBarry Smith extern int PLogInfoActivateClass(int); 13343a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 134614700edSBarry Smith 135614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 136614700edSBarry Smith 137a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 13877c4ece6SBarry Smith 13977c4ece6SBarry Smith #if defined (HAVE_MPE) 14077c4ece6SBarry Smith #include "mpe.h" 141614700edSBarry Smith #define MPEBEGIN 1000 14277c4ece6SBarry Smith extern int PLogMPEBegin(); 14377c4ece6SBarry Smith extern int PLogMPEDump(char *); 144614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 145614700edSBarry Smith extern int PLogEventMPEActivate(int); 146905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 147614700edSBarry Smith #else 148c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 149c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 15077c4ece6SBarry Smith #endif 15177c4ece6SBarry Smith 152614700edSBarry Smith extern int PLogEventActivate(int); 153905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 154614700edSBarry Smith 1553e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1563e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 157614700edSBarry Smith 158614700edSBarry Smith extern int PLogEventFlags[]; 159b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 160b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 161b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 162b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 16377c4ece6SBarry Smith 16477c4ece6SBarry Smith #if defined(HAVE_MPE) 16577c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 16677c4ece6SBarry Smith { _tacky++; \ 167b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 168b3bbe94bSBarry Smith (*_PLogPLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 169614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 17077c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 17177c4ece6SBarry Smith } 17277c4ece6SBarry Smith #else 17377c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 17477c4ece6SBarry Smith { _tacky++; \ 175b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 176b3bbe94bSBarry Smith (*_PLogPLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 17777c4ece6SBarry Smith } 17877c4ece6SBarry Smith #endif 17977c4ece6SBarry Smith 18077c4ece6SBarry Smith #if defined(HAVE_MPE) 18177c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 182b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 183b3bbe94bSBarry Smith (*_PLogPLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 184614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 18577c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 18677c4ece6SBarry Smith } _tacky--;} 18777c4ece6SBarry Smith #else 18877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 189b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 190b3bbe94bSBarry Smith (*_PLogPLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 19177c4ece6SBarry Smith } _tacky--;} 19277c4ece6SBarry Smith #endif 19377c4ece6SBarry Smith 19477c4ece6SBarry Smith 19577c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 19677c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 19777c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 19877c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 19977c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 200b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 201b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 20277c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 20377c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 20477c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 20577c4ece6SBarry Smith extern int PLogDestroy(); 20677c4ece6SBarry Smith extern int PLogStagePush(int); 20777c4ece6SBarry Smith extern int PLogStagePop(); 20877c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 2093044e3d5SSatish Balay extern int PLogPrintSummary(MPI_Comm,char *); 210edde42fcSLois Curfman McInnes extern int PLogBegin(); 211bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 212edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 213bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 214bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 215edde42fcSLois Curfman McInnes extern int PLogDump(char*); 216edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 217*47794344SBarry Smith extern PLogDouble PetscGetFlops(); 21877c4ece6SBarry Smith 219*47794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 220*47794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 221*47794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 222ce85283eSBarry Smith /* 22384cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 224ce85283eSBarry Smith uses macros to defined the MPI operations. 22515308354SBarry Smith 22615308354SBarry Smith It does not work correctly from HP-UX because it processes the 22715308354SBarry Smith macros in a way that sometimes it double counts. 2287c1e34a4SSatish Balay 2297c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 230ce85283eSBarry Smith */ 231a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt) 23277a39924SBarry Smith /* 23377a39924SBarry Smith Logging of MPI activities 23477a39924SBarry Smith */ 23577a39924SBarry Smith 23677a39924SBarry Smith #define TypeSize(buff,count,type) \ 23777a39924SBarry Smith { \ 23877a39924SBarry Smith if (type == MPIU_SCALAR) { \ 239*47794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(Scalar)); \ 24077a39924SBarry Smith } else if (type == MPI_INT) { \ 241*47794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(int)); \ 24277a39924SBarry Smith } else { \ 243*47794344SBarry Smith int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \ 24477a39924SBarry Smith } \ 24577a39924SBarry Smith } 24677a39924SBarry Smith 24777a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 24877a39924SBarry Smith { \ 24977a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request); \ 25077a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 25177a39924SBarry Smith } 25215308354SBarry Smith 25377a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 25477a39924SBarry Smith { \ 25577a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 256e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 25777a39924SBarry Smith } 25815308354SBarry Smith 2590d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 2600d4b0b6cSBarry Smith { \ 2610d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 262*47794344SBarry Smith irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \ 2630d4b0b6cSBarry Smith } 2640d4b0b6cSBarry Smith 2650d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 2660d4b0b6cSBarry Smith { \ 2670d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 268*47794344SBarry Smith isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2690d4b0b6cSBarry Smith } 2700d4b0b6cSBarry Smith 2710d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 2720d4b0b6cSBarry Smith { \ 2730d4b0b6cSBarry Smith MPI_Start( requests); \ 274*47794344SBarry Smith isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2750d4b0b6cSBarry Smith } 2760d4b0b6cSBarry Smith 277ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 278ce85283eSBarry Smith { \ 279ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 280ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 281ce85283eSBarry Smith } 28215308354SBarry Smith 28377a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 28477a39924SBarry Smith { \ 28577a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 286e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 28777a39924SBarry Smith } 28877a39924SBarry Smith 28977a39924SBarry Smith #define MPI_Wait(request, status) \ 29077a39924SBarry Smith ( \ 291e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 29277a39924SBarry Smith MPI_Wait(request, status) \ 29377a39924SBarry Smith ) 29477a39924SBarry Smith 29577a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 29677a39924SBarry Smith ( \ 297e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 29877a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 29977a39924SBarry Smith ) 30077a39924SBarry Smith 30177a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30277a39924SBarry Smith ( \ 303*47794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 30477a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30577a39924SBarry Smith ) 30677a39924SBarry Smith 30777a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 30877a39924SBarry Smith ( \ 30977a39924SBarry Smith allreduce_ct++, \ 31077a39924SBarry Smith MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 31177a39924SBarry Smith ) 3120d4b0b6cSBarry Smith #else 3130d4b0b6cSBarry Smith 3140d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3150d4b0b6cSBarry Smith { \ 3160d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3170d4b0b6cSBarry Smith } 3180d4b0b6cSBarry Smith 3190d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3200d4b0b6cSBarry Smith { \ 3210d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3220d4b0b6cSBarry Smith } 3230d4b0b6cSBarry Smith 3240d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3250d4b0b6cSBarry Smith { \ 3260d4b0b6cSBarry Smith MPI_Start( requests); \ 3270d4b0b6cSBarry Smith } 3280d4b0b6cSBarry Smith 32915308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 330614700edSBarry Smith 331614700edSBarry Smith #else /* ------------------------------------------------------------*/ 332614700edSBarry Smith 333614700edSBarry Smith #define PLogFlops(n) 334614700edSBarry Smith 335614700edSBarry Smith #if defined (HAVE_MPE) 336614700edSBarry Smith #define MPEBEGIN 1000 337614700edSBarry Smith extern int PLogMPEBegin(); 338614700edSBarry Smith extern int PLogMPEDump(char *); 33977c4ece6SBarry Smith #else 340bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 341bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 342614700edSBarry Smith #endif 343614700edSBarry Smith 344bf343e40SBarry Smith #define PLogEventActivate(a) 0 345bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 346614700edSBarry Smith 347bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 348bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 34977c4ece6SBarry Smith 350b3bbe94bSBarry Smith #define _PLogPLB 0 351b3bbe94bSBarry Smith #define _PLogPLE 0 352b3bbe94bSBarry Smith #define _PLogPHC 0 353b3bbe94bSBarry Smith #define _PLogPHD 0 354a5558d3fSBarry Smith #define PetscGetFlops() 0.0 355d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 356d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 357d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 358d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 359d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 360d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 361d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 362d7a720efSLois Curfman McInnes #define PLogDestroy() 363bf343e40SBarry Smith #define PLogStagePush(a) 364d7a720efSLois Curfman McInnes #define PLogStagePop() 365d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 366d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 367d7a720efSLois Curfman McInnes #define PLogBegin() 368974088aaSSatish Balay #define PLogTraceBegin(file) 0 369bc1211c7SBarry Smith #define PLogSet(lb,le) 370d7a720efSLois Curfman McInnes #define PLogAllBegin() 371d7a720efSLois Curfman McInnes #define PLogDump(char) 372dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 373d7a720efSLois Curfman McInnes #define PLogMPEBegin() 374d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 3757f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 376ce6058e1SBarry Smith 377ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */ 378ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 379ce6058e1SBarry Smith { \ 380ce6058e1SBarry Smith MPI_Startall( number, requests); \ 381ce6058e1SBarry Smith } 382ce6058e1SBarry Smith 383ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \ 384ce6058e1SBarry Smith { \ 385ce6058e1SBarry Smith MPI_Startall( number, requests); \ 386ce6058e1SBarry Smith } 387ce6058e1SBarry Smith 388ce6058e1SBarry Smith #define MPI_Start_isend(count, requests) \ 389ce6058e1SBarry Smith { \ 390ce6058e1SBarry Smith MPI_Start( requests); \ 391ce6058e1SBarry Smith } 392ce6058e1SBarry Smith #endif /* PETSC_LOG */ 3936daaf66cSBarry Smith 3948b6d568bSLois Curfman McInnes /*MC 39519b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 39619b02663SBarry Smith 39719b02663SBarry Smith Input Parameter: 39819b02663SBarry Smith . f - flop counter 39919b02663SBarry Smith 40019b02663SBarry Smith Synopsis: 401682ac3c9SWilliam Gropp void PLogFlops(int f) 40219b02663SBarry Smith 40319b02663SBarry Smith Notes: 40419b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 40519b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 40619b02663SBarry Smith application code. 40719b02663SBarry Smith 40819b02663SBarry Smith PETSc automatically logs library events if the code has been 40919b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 41019b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 41119b02663SBarry Smith intended for logging user flops to supplement this PETSc 41219b02663SBarry Smith information. 41319b02663SBarry Smith 41419b02663SBarry Smith Example of Usage: 41535aab85fSBarry Smith $ int USER_EVENT; 416b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 41719b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 41819b02663SBarry Smith $ [code segment to monitor] 41919b02663SBarry Smith $ PLogFlops(user_flops) 42019b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 42119b02663SBarry Smith 42258cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 42319b02663SBarry Smith 424edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 42519b02663SBarry Smith M*/ 42619b02663SBarry Smith 42797bb86f7SLois Curfman McInnes 428d7a720efSLois Curfman McInnes /*MC 42919b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 43097bb86f7SLois Curfman McInnes 43197bb86f7SLois Curfman McInnes Input Parameters: 43235aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 43397bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 43497bb86f7SLois Curfman McInnes 43597bb86f7SLois Curfman McInnes Synopsis: 436682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 43797bb86f7SLois Curfman McInnes PetscObject o4) 43897bb86f7SLois Curfman McInnes 43997bb86f7SLois Curfman McInnes Notes: 44097bb86f7SLois Curfman McInnes You should also register each integer event with the command 44197bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 44297bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 44397bb86f7SLois Curfman McInnes 44497bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 44597bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 44697bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 44797bb86f7SLois Curfman McInnes to supplement this PETSc information. 44897bb86f7SLois Curfman McInnes 44997bb86f7SLois Curfman McInnes Example of Usage: 45035aab85fSBarry Smith $ int USER_EVENT; 4510eb211faSLois Curfman McInnes $ int user_event_flops; 452b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 45335aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 45497bb86f7SLois Curfman McInnes $ [code segment to monitor] 4550eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 45635aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 45797bb86f7SLois Curfman McInnes 45897bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 45997bb86f7SLois Curfman McInnes 46097bb86f7SLois Curfman McInnes .keywords: log, event, begin 46197bb86f7SLois Curfman McInnes M*/ 46297bb86f7SLois Curfman McInnes 463d7a720efSLois Curfman McInnes /*MC 46419b02663SBarry Smith PLogEventEnd - Log the end of a user event. 46597bb86f7SLois Curfman McInnes 46697bb86f7SLois Curfman McInnes Input Parameters: 46735aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 46897bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 46997bb86f7SLois Curfman McInnes 47097bb86f7SLois Curfman McInnes Synopsis: 471682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 47297bb86f7SLois Curfman McInnes PetscObject o4) 47397bb86f7SLois Curfman McInnes 47497bb86f7SLois Curfman McInnes Notes: 475b951964fSBarry Smith You should also register each additional integer event with the command 47697bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 47797bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 47897bb86f7SLois Curfman McInnes 47997bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 48097bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 48197bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 48297bb86f7SLois Curfman McInnes to supplement this PETSc information. 48397bb86f7SLois Curfman McInnes 48497bb86f7SLois Curfman McInnes Example of Usage: 48535aab85fSBarry Smith $ int USER_EVENT; 4860eb211faSLois Curfman McInnes $ int user_event_flops; 487b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 48897bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 48997bb86f7SLois Curfman McInnes $ [code segment to monitor] 4900eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 49197bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 49297bb86f7SLois Curfman McInnes 49397bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 49497bb86f7SLois Curfman McInnes 49597bb86f7SLois Curfman McInnes .keywords: log, event, end 49697bb86f7SLois Curfman McInnes M*/ 49797bb86f7SLois Curfman McInnes 498e0937024SBarry Smith 49997bb86f7SLois Curfman McInnes #endif 50041debaddSBarry Smith 50177c4ece6SBarry Smith 50277c4ece6SBarry Smith 50384cb2905SBarry Smith 50484cb2905SBarry Smith 50584cb2905SBarry Smith 506