1*3914022bSBarry Smith /* $Id: petsclog.h,v 1.109 1997/08/06 22:32:13 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 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 1074ad0fe8aSBarry Smith /* 1084ad0fe8aSBarry Smith Time spent by processors synchronousing for reduction 1094ad0fe8aSBarry Smith and then performing it. 1104ad0fe8aSBarry Smith */ 1114ad0fe8aSBarry Smith #define MPI_ReduceSync 101 1124ad0fe8aSBarry Smith #define MPI_ReduceComp 102 11355206aebSLois Curfman McInnes 1140513a670SBarry Smith #define EC_SetUp 105 1150513a670SBarry Smith #define EC_Solve 106 1160513a670SBarry Smith 11755206aebSLois Curfman McInnes #define DFVec_RefineVector 110 11855206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 11955206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 12055206aebSLois Curfman McInnes #define DFVec_DrawContours 113 12155206aebSLois Curfman McInnes 12241debaddSBarry Smith /* 123b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 12477c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 125b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 12641debaddSBarry Smith */ 12735aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1284dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 12997bb86f7SLois Curfman McInnes 13019b02663SBarry Smith /* Global flop counter */ 13147794344SBarry Smith extern PLogDouble _TotalFlops; 13219b02663SBarry Smith 133edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 13494a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 135cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 136614700edSBarry Smith extern int PLogInfoActivateClass(int); 13743a90d84SBarry Smith extern int PLogPrintInfo; /* if 1, indicates PLogInfo() is turned on */ 138614700edSBarry Smith 139614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 140614700edSBarry Smith 141a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 14277c4ece6SBarry Smith 14377c4ece6SBarry Smith #if defined (HAVE_MPE) 14477c4ece6SBarry Smith #include "mpe.h" 145614700edSBarry Smith #define MPEBEGIN 1000 14677c4ece6SBarry Smith extern int PLogMPEBegin(); 14777c4ece6SBarry Smith extern int PLogMPEDump(char *); 148614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 149614700edSBarry Smith extern int PLogEventMPEActivate(int); 150905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 151614700edSBarry Smith #else 152c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0 153c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0 15477c4ece6SBarry Smith #endif 15577c4ece6SBarry Smith 156614700edSBarry Smith extern int PLogEventActivate(int); 157905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 158614700edSBarry Smith 1593e584e2eSBarry Smith extern int PLogEventActivateClass(int); 1603e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 161614700edSBarry Smith 162614700edSBarry Smith extern int PLogEventFlags[]; 163b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 164b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 165b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject); 166b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject); 16777c4ece6SBarry Smith 16877c4ece6SBarry Smith #if defined(HAVE_MPE) 169a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 17056cd22aeSBarry Smith { \ 171b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 17256cd22aeSBarry Smith (*_PLogPLB)(e,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 17356cd22aeSBarry Smith if (UseMPE && PLogEventMPEFlags[e])\ 17477c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 17577c4ece6SBarry Smith } 17677c4ece6SBarry Smith #else 177a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4) \ 17856cd22aeSBarry Smith { \ 179b3bbe94bSBarry Smith if (_PLogPLB && PLogEventFlags[e]) \ 18056cd22aeSBarry Smith (*_PLogPLB)(e,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 18177c4ece6SBarry Smith } 18277c4ece6SBarry Smith #endif 18377c4ece6SBarry Smith 18477c4ece6SBarry Smith #if defined(HAVE_MPE) 18577c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 186b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 18756cd22aeSBarry Smith (*_PLogPLE)(e,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 18856cd22aeSBarry Smith if (UseMPE && PLogEventMPEFlags[e])\ 18977c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 190a1b5d808SSatish Balay } 19177c4ece6SBarry Smith #else 19277c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 193b3bbe94bSBarry Smith if (_PLogPLE && PLogEventFlags[e]) \ 19456cd22aeSBarry Smith (*_PLogPLE)(e,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 195a1b5d808SSatish Balay } 19677c4ece6SBarry Smith #endif 19777c4ece6SBarry Smith 19877c4ece6SBarry Smith 19977c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 20077c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 20177c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 20277c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 20377c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 204b3bbe94bSBarry Smith #define PLogObjectCreate(h) {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);} 205b3bbe94bSBarry Smith #define PLogObjectDestroy(h) {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);} 20677c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 20777c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 20877c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 20977c4ece6SBarry Smith extern int PLogDestroy(); 21077c4ece6SBarry Smith extern int PLogStagePush(int); 21177c4ece6SBarry Smith extern int PLogStagePop(); 21277c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 2133044e3d5SSatish Balay extern int PLogPrintSummary(MPI_Comm,char *); 214edde42fcSLois Curfman McInnes extern int PLogBegin(); 215bc1211c7SBarry Smith extern int PLogTraceBegin(FILE *); 216edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 217bc1211c7SBarry Smith extern int PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject), 218bc1211c7SBarry Smith int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject)); 219edde42fcSLois Curfman McInnes extern int PLogDump(char*); 220edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 22147794344SBarry Smith extern PLogDouble PetscGetFlops(); 22277c4ece6SBarry Smith 22347794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 22447794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len; 22547794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct; 226ce85283eSBarry Smith /* 22784cb2905SBarry Smith This does not work for MPI-Uni because our src/mpiuni/mpi.h file 228ce85283eSBarry Smith uses macros to defined the MPI operations. 22915308354SBarry Smith 23015308354SBarry Smith It does not work correctly from HP-UX because it processes the 23115308354SBarry Smith macros in a way that sometimes it double counts. 2327c1e34a4SSatish Balay 2337c1e34a4SSatish Balay It does not work with Windows NT because winmpich lacks MPI_Type_size() 234ce85283eSBarry Smith */ 235a1f2733dSSatish Balay #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) && !defined (PARCH_nt) 23677a39924SBarry Smith /* 23777a39924SBarry Smith Logging of MPI activities 23877a39924SBarry Smith */ 23977a39924SBarry Smith 24077a39924SBarry Smith #define TypeSize(buff,count,type) \ 24177a39924SBarry Smith { \ 24277a39924SBarry Smith if (type == MPIU_SCALAR) { \ 24347794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(Scalar)); \ 24477a39924SBarry Smith } else if (type == MPI_INT) { \ 24547794344SBarry Smith buff += (PLogDouble) ((count)*sizeof(int)); \ 24677a39924SBarry Smith } else { \ 24747794344SBarry Smith int _size; MPI_Type_size(type,&_size); buff += (PLogDouble) ((count)*_size); \ 24877a39924SBarry Smith } \ 24977a39924SBarry Smith } 25077a39924SBarry Smith 25177a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 25277a39924SBarry Smith { \ 25377a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request); \ 25477a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 25577a39924SBarry Smith } 25615308354SBarry Smith 25777a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 25877a39924SBarry Smith { \ 25977a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 260e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 26177a39924SBarry Smith } 26215308354SBarry Smith 2630d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 2640d4b0b6cSBarry Smith { \ 2650d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 26647794344SBarry Smith irecv_ct += (PLogDouble)(number); irecv_len += (PLogDouble) (count*sizeof(Scalar)); \ 2670d4b0b6cSBarry Smith } 2680d4b0b6cSBarry Smith 2690d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 2700d4b0b6cSBarry Smith { \ 2710d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 27247794344SBarry Smith isend_ct += (PLogDouble)(number); isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2730d4b0b6cSBarry Smith } 2740d4b0b6cSBarry Smith 2750d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 2760d4b0b6cSBarry Smith { \ 2770d4b0b6cSBarry Smith MPI_Start( requests); \ 27847794344SBarry Smith isend_ct++; isend_len += (PLogDouble) (count*sizeof(Scalar)); \ 2790d4b0b6cSBarry Smith } 2800d4b0b6cSBarry Smith 281ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 282ce85283eSBarry Smith { \ 283ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 284ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 285ce85283eSBarry Smith } 28615308354SBarry Smith 28777a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 28877a39924SBarry Smith { \ 28977a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 290e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 29177a39924SBarry Smith } 29277a39924SBarry Smith 29377a39924SBarry Smith #define MPI_Wait(request, status) \ 29477a39924SBarry Smith ( \ 295e0937024SBarry Smith wait_ct++, sum_of_waits_ct++, \ 29677a39924SBarry Smith MPI_Wait(request, status) \ 29777a39924SBarry Smith ) 29877a39924SBarry Smith 29977a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 30077a39924SBarry Smith ( \ 301e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 30277a39924SBarry Smith MPI_Waitany(a, b, c, d) \ 30377a39924SBarry Smith ) 30477a39924SBarry Smith 30577a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30677a39924SBarry Smith ( \ 30747794344SBarry Smith wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count), \ 30877a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 30977a39924SBarry Smith ) 31077a39924SBarry Smith 311*3914022bSBarry Smith /* 312*3914022bSBarry Smith If logging is turned on for MPI_ReduceSync then this logs 313*3914022bSBarry Smith the time to synchronous and then the time to do the reduction. 314*3914022bSBarry Smith */ 315*3914022bSBarry Smith extern int PETSC_DUMMY; 31677a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 317*3914022bSBarry Smith (PETSC_DUMMY = 0); { \ 318*3914022bSBarry Smith if (_PLogPLB && PLogEventFlags[MPI_ReduceSync]) { \ 319*3914022bSBarry Smith PLogEventBegin(MPI_ReduceSync,0,0,0,0); \ 320*3914022bSBarry Smith MPI_Barrier(comm); \ 321*3914022bSBarry Smith PLogEventEnd(MPI_ReduceSync,0,0,0,0); \ 322*3914022bSBarry Smith } \ 323*3914022bSBarry Smith PLogEventBegin(MPI_ReduceComp,0,0,0,0); \ 324*3914022bSBarry Smith allreduce_ct++; \ 325*3914022bSBarry Smith MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm); \ 326*3914022bSBarry Smith PLogEventEnd(MPI_ReduceComp,0,0,0,0); \ 327*3914022bSBarry Smith } 328*3914022bSBarry Smith 3290d4b0b6cSBarry Smith #else 3300d4b0b6cSBarry Smith 3310d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3320d4b0b6cSBarry Smith { \ 3330d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3340d4b0b6cSBarry Smith } 3350d4b0b6cSBarry Smith 3360d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3370d4b0b6cSBarry Smith { \ 3380d4b0b6cSBarry Smith MPI_Startall( number, requests); \ 3390d4b0b6cSBarry Smith } 3400d4b0b6cSBarry Smith 3410d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3420d4b0b6cSBarry Smith { \ 3430d4b0b6cSBarry Smith MPI_Start( requests); \ 3440d4b0b6cSBarry Smith } 3450d4b0b6cSBarry Smith 34615308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 347614700edSBarry Smith 348614700edSBarry Smith #else /* ------------------------------------------------------------*/ 349614700edSBarry Smith 350614700edSBarry Smith #define PLogFlops(n) 351614700edSBarry Smith 352614700edSBarry Smith #if defined (HAVE_MPE) 353614700edSBarry Smith #define MPEBEGIN 1000 354614700edSBarry Smith extern int PLogMPEBegin(); 355614700edSBarry Smith extern int PLogMPEDump(char *); 35677c4ece6SBarry Smith #else 357bf343e40SBarry Smith #define PLogEventMPEActivate(a) 0 358bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0 359614700edSBarry Smith #endif 360614700edSBarry Smith 361bf343e40SBarry Smith #define PLogEventActivate(a) 0 362bf343e40SBarry Smith #define PLogEventDeactivate(a) 0 363614700edSBarry Smith 364bf343e40SBarry Smith #define PLogEventActivateClass(a) 0 365bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0 36677c4ece6SBarry Smith 367b3bbe94bSBarry Smith #define _PLogPLB 0 368b3bbe94bSBarry Smith #define _PLogPLE 0 369b3bbe94bSBarry Smith #define _PLogPHC 0 370b3bbe94bSBarry Smith #define _PLogPHD 0 371a5558d3fSBarry Smith #define PetscGetFlops() 0.0 372d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 373d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 374d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 375d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 376d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 377d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 378d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 379d7a720efSLois Curfman McInnes #define PLogDestroy() 380bf343e40SBarry Smith #define PLogStagePush(a) 381d7a720efSLois Curfman McInnes #define PLogStagePop() 382d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 383d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 384d7a720efSLois Curfman McInnes #define PLogBegin() 385974088aaSSatish Balay #define PLogTraceBegin(file) 0 386bc1211c7SBarry Smith #define PLogSet(lb,le) 387d7a720efSLois Curfman McInnes #define PLogAllBegin() 388d7a720efSLois Curfman McInnes #define PLogDump(char) 389dc4777aeSSatish Balay #define PLogEventRegister(a,b,c) 0 390d7a720efSLois Curfman McInnes #define PLogMPEBegin() 391d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 3927f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 393ce6058e1SBarry Smith 394ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */ 395ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 396ce6058e1SBarry Smith { \ 397ce6058e1SBarry Smith MPI_Startall( number, requests); \ 398ce6058e1SBarry Smith } 399ce6058e1SBarry Smith 400ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \ 401ce6058e1SBarry Smith { \ 402ce6058e1SBarry Smith MPI_Startall( number, requests); \ 403ce6058e1SBarry Smith } 404ce6058e1SBarry Smith 405ce6058e1SBarry Smith #define MPI_Start_isend(count, requests) \ 406ce6058e1SBarry Smith { \ 407ce6058e1SBarry Smith MPI_Start( requests); \ 408ce6058e1SBarry Smith } 409ce6058e1SBarry Smith #endif /* PETSC_LOG */ 4106daaf66cSBarry Smith 4118b6d568bSLois Curfman McInnes /*MC 41219b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 41319b02663SBarry Smith 41419b02663SBarry Smith Input Parameter: 41519b02663SBarry Smith . f - flop counter 41619b02663SBarry Smith 41719b02663SBarry Smith Synopsis: 418682ac3c9SWilliam Gropp void PLogFlops(int f) 41919b02663SBarry Smith 42019b02663SBarry Smith Notes: 42119b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 42219b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 42319b02663SBarry Smith application code. 42419b02663SBarry Smith 42519b02663SBarry Smith PETSc automatically logs library events if the code has been 42619b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 42719b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 42819b02663SBarry Smith intended for logging user flops to supplement this PETSc 42919b02663SBarry Smith information. 43019b02663SBarry Smith 43119b02663SBarry Smith Example of Usage: 43235aab85fSBarry Smith $ int USER_EVENT; 433b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 43419b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 43519b02663SBarry Smith $ [code segment to monitor] 43619b02663SBarry Smith $ PLogFlops(user_flops) 43719b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 43819b02663SBarry Smith 43958cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 44019b02663SBarry Smith 441edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 44219b02663SBarry Smith M*/ 44319b02663SBarry Smith 44497bb86f7SLois Curfman McInnes 445d7a720efSLois Curfman McInnes /*MC 44619b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 44797bb86f7SLois Curfman McInnes 44897bb86f7SLois Curfman McInnes Input Parameters: 44935aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 45097bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 45197bb86f7SLois Curfman McInnes 45297bb86f7SLois Curfman McInnes Synopsis: 453682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 45497bb86f7SLois Curfman McInnes PetscObject o4) 45597bb86f7SLois Curfman McInnes 45697bb86f7SLois Curfman McInnes Notes: 45797bb86f7SLois Curfman McInnes You should also register each integer event with the command 45897bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 45997bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 46097bb86f7SLois Curfman McInnes 46197bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 46297bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 46397bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 46497bb86f7SLois Curfman McInnes to supplement this PETSc information. 46597bb86f7SLois Curfman McInnes 46697bb86f7SLois Curfman McInnes Example of Usage: 46735aab85fSBarry Smith $ int USER_EVENT; 4680eb211faSLois Curfman McInnes $ int user_event_flops; 469b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 47035aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 47197bb86f7SLois Curfman McInnes $ [code segment to monitor] 4720eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 47335aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 47497bb86f7SLois Curfman McInnes 47597bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 47697bb86f7SLois Curfman McInnes 47797bb86f7SLois Curfman McInnes .keywords: log, event, begin 47897bb86f7SLois Curfman McInnes M*/ 47997bb86f7SLois Curfman McInnes 480d7a720efSLois Curfman McInnes /*MC 48119b02663SBarry Smith PLogEventEnd - Log the end of a user event. 48297bb86f7SLois Curfman McInnes 48397bb86f7SLois Curfman McInnes Input Parameters: 48435aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 48597bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 48697bb86f7SLois Curfman McInnes 48797bb86f7SLois Curfman McInnes Synopsis: 488682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 48997bb86f7SLois Curfman McInnes PetscObject o4) 49097bb86f7SLois Curfman McInnes 49197bb86f7SLois Curfman McInnes Notes: 492b951964fSBarry Smith You should also register each additional integer event with the command 49397bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 49497bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 49597bb86f7SLois Curfman McInnes 49697bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 49797bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 49897bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 49997bb86f7SLois Curfman McInnes to supplement this PETSc information. 50097bb86f7SLois Curfman McInnes 50197bb86f7SLois Curfman McInnes Example of Usage: 50235aab85fSBarry Smith $ int USER_EVENT; 5030eb211faSLois Curfman McInnes $ int user_event_flops; 504b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 50597bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 50697bb86f7SLois Curfman McInnes $ [code segment to monitor] 5070eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 50897bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 50997bb86f7SLois Curfman McInnes 51097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 51197bb86f7SLois Curfman McInnes 51297bb86f7SLois Curfman McInnes .keywords: log, event, end 51397bb86f7SLois Curfman McInnes M*/ 51497bb86f7SLois Curfman McInnes 515e0937024SBarry Smith 51697bb86f7SLois Curfman McInnes #endif 51741debaddSBarry Smith 51877c4ece6SBarry Smith 51977c4ece6SBarry Smith 52084cb2905SBarry Smith 52184cb2905SBarry Smith 52284cb2905SBarry Smith 523