1*2ee1dbe0SBarry Smith /* $Id: petsclog.h,v 1.105 1997/03/26 01:38:58 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, 18*2ee1dbe0SBarry 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 584dcbc457SBarry Smith #define VEC_Dot 40 594dcbc457SBarry Smith #define VEC_Norm 41 604dcbc457SBarry Smith #define VEC_Max 42 614dcbc457SBarry Smith #define VEC_Min 43 624dcbc457SBarry Smith #define VEC_TDot 44 634dcbc457SBarry Smith #define VEC_Scale 45 644dcbc457SBarry Smith #define VEC_Copy 46 654dcbc457SBarry Smith #define VEC_Set 47 664dcbc457SBarry Smith #define VEC_AXPY 48 674dcbc457SBarry Smith #define VEC_AYPX 49 684dcbc457SBarry Smith #define VEC_Swap 50 694dcbc457SBarry Smith #define VEC_WAXPY 51 704dcbc457SBarry Smith #define VEC_AssemblyBegin 52 714dcbc457SBarry Smith #define VEC_AssemblyEnd 53 724dcbc457SBarry Smith #define VEC_MTDot 54 734dcbc457SBarry Smith #define VEC_MDot 55 744dcbc457SBarry Smith #define VEC_MAXPY 56 754dcbc457SBarry Smith #define VEC_PMult 57 764dcbc457SBarry Smith #define VEC_SetValues 58 774dcbc457SBarry Smith #define VEC_Load 59 784dcbc457SBarry Smith #define VEC_View 60 794dcbc457SBarry Smith #define VEC_ScatterBegin 61 804dcbc457SBarry Smith #define VEC_ScatterEnd 62 81bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 8297bb86f7SLois Curfman McInnes 834dcbc457SBarry Smith #define SLES_Solve 70 844dcbc457SBarry Smith #define SLES_SetUp 71 8597bb86f7SLois Curfman McInnes 864dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 8797bb86f7SLois Curfman McInnes 881bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices 74 894dcbc457SBarry Smith #define PC_SetUp 75 9036058207SBarry Smith #define PC_SetUpOnBlocks 76 9132284f49SSatish Balay #define PC_Apply 77 92614700edSBarry Smith #define PC_ApplySymmetricLeft 78 93614700edSBarry Smith #define PC_ApplySymmetricRight 79 944dcbc457SBarry Smith 954dcbc457SBarry Smith #define SNES_Solve 80 964dcbc457SBarry Smith #define SNES_LineSearch 81 974dcbc457SBarry Smith #define SNES_FunctionEval 82 984dcbc457SBarry Smith #define SNES_JacobianEval 83 994dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 1004dcbc457SBarry Smith #define SNES_GradientEval 85 1014dcbc457SBarry Smith #define SNES_HessianEval 86 1024dcbc457SBarry Smith 103682d7d0cSBarry Smith #define TS_Step 90 104bf343e40SBarry Smith #define TS_PseudoComputeTimeStep 91 10572936c9dSBarry Smith 10672936c9dSBarry Smith #define Petsc_Barrier 100 10755206aebSLois Curfman McInnes 1080513a670SBarry Smith #define EC_SetUp 105 1090513a670SBarry Smith #define EC_Solve 106 1100513a670SBarry Smith 11155206aebSLois Curfman McInnes #define DFVec_RefineVector 110 11255206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 11355206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 11455206aebSLois Curfman McInnes #define DFVec_DrawContours 113 11555206aebSLois Curfman McInnes 11641debaddSBarry Smith /* 117b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 11877c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 119b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 12041debaddSBarry Smith */ 12135aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1224dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 12397bb86f7SLois Curfman McInnes 12419b02663SBarry Smith /* Global flop counter */ 12547794344SBarry Smith extern PLogDouble _TotalFlops; 12619b02663SBarry Smith 127edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 12894a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 129cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 130614700edSBarry Smith extern int PLogInfoActivateClass(int); 13143a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 132614700edSBarry Smith 133614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 134614700edSBarry Smith 135a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 13677c4ece6SBarry Smith 13777c4ece6SBarry Smith #if defined (HAVE_MPE) 13877c4ece6SBarry Smith #include "mpe.h" 139614700edSBarry Smith #define MPEBEGIN 1000 14077c4ece6SBarry Smith extern int PLogMPEBegin(); 14177c4ece6SBarry Smith extern int PLogMPEDump(char *); 142614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 143614700edSBarry Smith extern int PLogEventMPEActivate(int); 144905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 145614700edSBarry Smith #else 146c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 147c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 14877c4ece6SBarry Smith #endif 14977c4ece6SBarry Smith 150614700edSBarry Smith extern int PLogEventActivate(int); 151905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 152614700edSBarry Smith 1533e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1543e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 155614700edSBarry Smith 156614700edSBarry Smith extern int PLogEventFlags[]; 157b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 158b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 159b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 160b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 16177c4ece6SBarry Smith 16277c4ece6SBarry Smith #if defined(HAVE_MPE) 16377c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 16477c4ece6SBarry Smith { _tacky++; \ 165b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 166b3bbe94bSBarry Smith (*_PLogPLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 167614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 16877c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 16977c4ece6SBarry Smith } 17077c4ece6SBarry Smith #else 17177c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 17277c4ece6SBarry Smith { _tacky++; \ 173b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 174b3bbe94bSBarry Smith (*_PLogPLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 17577c4ece6SBarry Smith } 17677c4ece6SBarry Smith #endif 17777c4ece6SBarry Smith 17877c4ece6SBarry Smith #if defined(HAVE_MPE) 17977c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 180b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 181b3bbe94bSBarry Smith (*_PLogPLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 182614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 18377c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 18477c4ece6SBarry Smith } _tacky--;} 18577c4ece6SBarry Smith #else 18677c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 187b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 188b3bbe94bSBarry Smith (*_PLogPLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 18977c4ece6SBarry Smith } _tacky--;} 19077c4ece6SBarry Smith #endif 19177c4ece6SBarry Smith 19277c4ece6SBarry Smith 19377c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 19477c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 19577c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 19677c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 19777c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 198b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 199b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 20077c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 20177c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 20277c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 20377c4ece6SBarry Smith extern int PLogDestroy(); 20477c4ece6SBarry Smith extern int PLogStagePush(int); 20577c4ece6SBarry Smith extern int PLogStagePop(); 20677c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 2073044e3d5SSatish Balay extern int PLogPrintSummary(MPI_Comm,char *); 208edde42fcSLois Curfman McInnes extern int PLogBegin(); 209bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 210edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 211bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 212bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 213edde42fcSLois Curfman McInnes extern int PLogDump(char*); 214edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 21547794344SBarry Smith extern PLogDouble PetscGetFlops(); 21677c4ece6SBarry Smith 21747794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 21847794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 21947794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 220ce85283eSBarry Smith /* 22184cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 222ce85283eSBarry Smith uses macros to defined the MPI operations. 22315308354SBarry Smith 22415308354SBarry Smith It does not work correctly from HP-UX because it processes the 22515308354SBarry Smith macros in a way that sometimes it double counts. 2267c1e34a4SSatish Balay 2277c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 228ce85283eSBarry Smith */ 229a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt) 23077a39924SBarry Smith /* 23177a39924SBarry Smith Logging of MPI activities 23277a39924SBarry Smith */ 23377a39924SBarry Smith 23477a39924SBarry Smith #define TypeSize(buff,count,type) \ 23577a39924SBarry Smith { \ 23677a39924SBarry Smith if (type == MPIU_SCALAR) { \ 23747794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(Scalar)); \ 23877a39924SBarry Smith } else if (type == MPI_INT) { \ 23947794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(int)); \ 24077a39924SBarry Smith } else { \ 24147794344SBarry Smith int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \ 24277a39924SBarry Smith } \ 24377a39924SBarry Smith } 24477a39924SBarry Smith 24577a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 24677a39924SBarry Smith { \ 24777a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request); \ 24877a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 24977a39924SBarry Smith } 25015308354SBarry Smith 25177a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 25277a39924SBarry Smith { \ 25377a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 254e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 25577a39924SBarry Smith } 25615308354SBarry Smith 2570d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 2580d4b0b6cSBarry Smith { \ 2590d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 26047794344SBarry Smith irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \ 2610d4b0b6cSBarry Smith } 2620d4b0b6cSBarry Smith 2630d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 2640d4b0b6cSBarry Smith { \ 2650d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 26647794344SBarry Smith isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2670d4b0b6cSBarry Smith } 2680d4b0b6cSBarry Smith 2690d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 2700d4b0b6cSBarry Smith { \ 2710d4b0b6cSBarry Smith MPI_Start( requests); \ 27247794344SBarry Smith isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2730d4b0b6cSBarry Smith } 2740d4b0b6cSBarry Smith 275ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 276ce85283eSBarry Smith { \ 277ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 278ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 279ce85283eSBarry Smith } 28015308354SBarry Smith 28177a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 28277a39924SBarry Smith { \ 28377a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 284e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 28577a39924SBarry Smith } 28677a39924SBarry Smith 28777a39924SBarry Smith #define MPI_Wait(request, status) \ 28877a39924SBarry Smith ( \ 289e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 29077a39924SBarry Smith MPI_Wait(request, status) \ 29177a39924SBarry Smith ) 29277a39924SBarry Smith 29377a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 29477a39924SBarry Smith ( \ 295e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 29677a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 29777a39924SBarry Smith ) 29877a39924SBarry Smith 29977a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30077a39924SBarry Smith ( \ 30147794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 30277a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30377a39924SBarry Smith ) 30477a39924SBarry Smith 30577a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 30677a39924SBarry Smith ( \ 30777a39924SBarry Smith allreduce_ct++, \ 30877a39924SBarry Smith MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 30977a39924SBarry Smith ) 3100d4b0b6cSBarry Smith #else 3110d4b0b6cSBarry Smith 3120d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3130d4b0b6cSBarry Smith { \ 3140d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3150d4b0b6cSBarry Smith } 3160d4b0b6cSBarry Smith 3170d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3180d4b0b6cSBarry Smith { \ 3190d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3200d4b0b6cSBarry Smith } 3210d4b0b6cSBarry Smith 3220d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3230d4b0b6cSBarry Smith { \ 3240d4b0b6cSBarry Smith MPI_Start( requests); \ 3250d4b0b6cSBarry Smith } 3260d4b0b6cSBarry Smith 32715308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 328614700edSBarry Smith 329614700edSBarry Smith #else /* ------------------------------------------------------------*/ 330614700edSBarry Smith 331614700edSBarry Smith #define PLogFlops(n) 332614700edSBarry Smith 333614700edSBarry Smith #if defined (HAVE_MPE) 334614700edSBarry Smith #define MPEBEGIN 1000 335614700edSBarry Smith extern int PLogMPEBegin(); 336614700edSBarry Smith extern int PLogMPEDump(char *); 33777c4ece6SBarry Smith #else 338bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 339bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 340614700edSBarry Smith #endif 341614700edSBarry Smith 342bf343e40SBarry Smith #define PLogEventActivate(a) 0 343bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 344614700edSBarry Smith 345bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 346bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 34777c4ece6SBarry Smith 348b3bbe94bSBarry Smith #define _PLogPLB 0 349b3bbe94bSBarry Smith #define _PLogPLE 0 350b3bbe94bSBarry Smith #define _PLogPHC 0 351b3bbe94bSBarry Smith #define _PLogPHD 0 352a5558d3fSBarry Smith #define PetscGetFlops() 0.0 353d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 354d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 355d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 356d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 357d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 358d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 359d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 360d7a720efSLois Curfman McInnes #define PLogDestroy() 361bf343e40SBarry Smith #define PLogStagePush(a) 362d7a720efSLois Curfman McInnes #define PLogStagePop() 363d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 364d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 365d7a720efSLois Curfman McInnes #define PLogBegin() 366974088aaSSatish Balay #define PLogTraceBegin(file) 0 367bc1211c7SBarry Smith #define PLogSet(lb,le) 368d7a720efSLois Curfman McInnes #define PLogAllBegin() 369d7a720efSLois Curfman McInnes #define PLogDump(char) 370dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 371d7a720efSLois Curfman McInnes #define PLogMPEBegin() 372d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 3737f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 374ce6058e1SBarry Smith 375ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */ 376ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 377ce6058e1SBarry Smith { \ 378ce6058e1SBarry Smith MPI_Startall( number, requests); \ 379ce6058e1SBarry Smith } 380ce6058e1SBarry Smith 381ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \ 382ce6058e1SBarry Smith { \ 383ce6058e1SBarry Smith MPI_Startall( number, requests); \ 384ce6058e1SBarry Smith } 385ce6058e1SBarry Smith 386ce6058e1SBarry Smith #define MPI_Start_isend(count, requests) \ 387ce6058e1SBarry Smith { \ 388ce6058e1SBarry Smith MPI_Start( requests); \ 389ce6058e1SBarry Smith } 390ce6058e1SBarry Smith #endif /* PETSC_LOG */ 3916daaf66cSBarry Smith 3928b6d568bSLois Curfman McInnes /*MC 39319b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 39419b02663SBarry Smith 39519b02663SBarry Smith Input Parameter: 39619b02663SBarry Smith . f - flop counter 39719b02663SBarry Smith 39819b02663SBarry Smith Synopsis: 399682ac3c9SWilliam Gropp void PLogFlops(int f) 40019b02663SBarry Smith 40119b02663SBarry Smith Notes: 40219b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 40319b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 40419b02663SBarry Smith application code. 40519b02663SBarry Smith 40619b02663SBarry Smith PETSc automatically logs library events if the code has been 40719b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 40819b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 40919b02663SBarry Smith intended for logging user flops to supplement this PETSc 41019b02663SBarry Smith information. 41119b02663SBarry Smith 41219b02663SBarry Smith Example of Usage: 41335aab85fSBarry Smith $ int USER_EVENT; 414b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 41519b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 41619b02663SBarry Smith $ [code segment to monitor] 41719b02663SBarry Smith $ PLogFlops(user_flops) 41819b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 41919b02663SBarry Smith 42058cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 42119b02663SBarry Smith 422edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 42319b02663SBarry Smith M*/ 42419b02663SBarry Smith 42597bb86f7SLois Curfman McInnes 426d7a720efSLois Curfman McInnes /*MC 42719b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 42897bb86f7SLois Curfman McInnes 42997bb86f7SLois Curfman McInnes Input Parameters: 43035aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 43197bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 43297bb86f7SLois Curfman McInnes 43397bb86f7SLois Curfman McInnes Synopsis: 434682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 43597bb86f7SLois Curfman McInnes PetscObject o4) 43697bb86f7SLois Curfman McInnes 43797bb86f7SLois Curfman McInnes Notes: 43897bb86f7SLois Curfman McInnes You should also register each integer event with the command 43997bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 44097bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 44197bb86f7SLois Curfman McInnes 44297bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 44397bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 44497bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 44597bb86f7SLois Curfman McInnes to supplement this PETSc information. 44697bb86f7SLois Curfman McInnes 44797bb86f7SLois Curfman McInnes Example of Usage: 44835aab85fSBarry Smith $ int USER_EVENT; 4490eb211faSLois Curfman McInnes $ int user_event_flops; 450b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 45135aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 45297bb86f7SLois Curfman McInnes $ [code segment to monitor] 4530eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 45435aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 45597bb86f7SLois Curfman McInnes 45697bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 45797bb86f7SLois Curfman McInnes 45897bb86f7SLois Curfman McInnes .keywords: log, event, begin 45997bb86f7SLois Curfman McInnes M*/ 46097bb86f7SLois Curfman McInnes 461d7a720efSLois Curfman McInnes /*MC 46219b02663SBarry Smith PLogEventEnd - Log the end of a user event. 46397bb86f7SLois Curfman McInnes 46497bb86f7SLois Curfman McInnes Input Parameters: 46535aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 46697bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 46797bb86f7SLois Curfman McInnes 46897bb86f7SLois Curfman McInnes Synopsis: 469682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 47097bb86f7SLois Curfman McInnes PetscObject o4) 47197bb86f7SLois Curfman McInnes 47297bb86f7SLois Curfman McInnes Notes: 473b951964fSBarry Smith You should also register each additional integer event with the command 47497bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 47597bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 47697bb86f7SLois Curfman McInnes 47797bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 47897bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 47997bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 48097bb86f7SLois Curfman McInnes to supplement this PETSc information. 48197bb86f7SLois Curfman McInnes 48297bb86f7SLois Curfman McInnes Example of Usage: 48335aab85fSBarry Smith $ int USER_EVENT; 4840eb211faSLois Curfman McInnes $ int user_event_flops; 485b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 48697bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 48797bb86f7SLois Curfman McInnes $ [code segment to monitor] 4880eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 48997bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 49097bb86f7SLois Curfman McInnes 49197bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 49297bb86f7SLois Curfman McInnes 49397bb86f7SLois Curfman McInnes .keywords: log, event, end 49497bb86f7SLois Curfman McInnes M*/ 49597bb86f7SLois Curfman McInnes 496e0937024SBarry Smith 49797bb86f7SLois Curfman McInnes #endif 49841debaddSBarry Smith 49977c4ece6SBarry Smith 50077c4ece6SBarry Smith 50184cb2905SBarry Smith 50284cb2905SBarry Smith 50384cb2905SBarry Smith 504