1*3e584e2eSBarry Smith /* $Id: plog.h,v 1.87 1996/08/29 00:17: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, 18a2ce50c7SBarry Smith petsc/src/plog/src/plogmpe.c and 19a2ce50c7SBarry Smith petsc/include/FINCLUDE/plog.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 52*3e584e2eSBarry 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 10472936c9dSBarry Smith 10572936c9dSBarry Smith #define Petsc_Barrier 100 10655206aebSLois Curfman McInnes 10755206aebSLois Curfman McInnes #define DFVec_RefineVector 110 10855206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 10955206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 11055206aebSLois Curfman McInnes #define DFVec_DrawContours 113 11155206aebSLois Curfman McInnes 11241debaddSBarry Smith /* 113b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 11477c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 115b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 11641debaddSBarry Smith */ 11735aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1184dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 11997bb86f7SLois Curfman McInnes 12019b02663SBarry Smith /* Global flop counter */ 12119b02663SBarry Smith extern double _TotalFlops; 12219b02663SBarry Smith 123edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 12494a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 125cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 126614700edSBarry Smith extern int PLogInfoActivateClass(int); 127614700edSBarry Smith 128614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 129614700edSBarry Smith 130a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 13177c4ece6SBarry Smith 13277c4ece6SBarry Smith #if defined (HAVE_MPE) 13377c4ece6SBarry Smith #include "mpe.h" 134614700edSBarry Smith #define MPEBEGIN 1000 13577c4ece6SBarry Smith extern int PLogMPEBegin(); 13677c4ece6SBarry Smith extern int PLogMPEDump(char *); 137614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 138614700edSBarry Smith extern int PLogEventMPEActivate(int); 139905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int); 140614700edSBarry Smith #else 141614700edSBarry Smith #define PLogEventMPEActivate(a) 142905e6a2fSBarry Smith #define PLogEventMPEDeactivate(a) 14377c4ece6SBarry Smith #endif 14477c4ece6SBarry Smith 145614700edSBarry Smith extern int PLogEventActivate(int); 146905e6a2fSBarry Smith extern int PLogEventDeactivate(int); 147614700edSBarry Smith 148*3e584e2eSBarry Smith extern int PLogEventActivateClass(int); 149*3e584e2eSBarry Smith extern int PLogEventDeactivateClass(int); 150614700edSBarry Smith 151614700edSBarry Smith extern int PLogEventFlags[]; 15277c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15377c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15477c4ece6SBarry Smith extern int (*_PHC)(PetscObject); 15577c4ece6SBarry Smith extern int (*_PHD)(PetscObject); 15677c4ece6SBarry Smith 15777c4ece6SBarry Smith #if defined(HAVE_MPE) 15877c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 15977c4ece6SBarry Smith { _tacky++; \ 160614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 16177c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 162614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 16377c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 16477c4ece6SBarry Smith } 16577c4ece6SBarry Smith #else 16677c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 16777c4ece6SBarry Smith { _tacky++; \ 168614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 16977c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 17077c4ece6SBarry Smith } 17177c4ece6SBarry Smith #endif 17277c4ece6SBarry Smith 17377c4ece6SBarry Smith #if defined(HAVE_MPE) 17477c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 175614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 17677c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 177614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 17877c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 17977c4ece6SBarry Smith } _tacky--;} 18077c4ece6SBarry Smith #else 18177c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 182614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 18377c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 18477c4ece6SBarry Smith } _tacky--;} 18577c4ece6SBarry Smith #endif 18677c4ece6SBarry Smith 18777c4ece6SBarry Smith 18877c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 18977c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 19077c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 19177c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 19277c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 19377c4ece6SBarry Smith #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 19477c4ece6SBarry Smith #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 19577c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 19677c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 19777c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 19877c4ece6SBarry Smith extern int PLogDestroy(); 19977c4ece6SBarry Smith extern int PLogStagePush(int); 20077c4ece6SBarry Smith extern int PLogStagePop(); 20177c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 202edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *); 203edde42fcSLois Curfman McInnes extern int PLogBegin(); 204edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 205edde42fcSLois Curfman McInnes extern int PLogDump(char*); 206edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 207e0937024SBarry Smith extern double PetscGetFlops(); 20877c4ece6SBarry Smith 209693211c1SBarry Smith extern double irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 210693211c1SBarry Smith extern double irecv_len, isend_len, recv_len, send_len; 211693211c1SBarry Smith extern double wait_all_ct,allreduce_ct,sum_of_waits_ct; 212ce85283eSBarry Smith /* 213ce85283eSBarry Smith This does not use for MPI-Uni because our src/mpiuni/mpi.h file 214ce85283eSBarry Smith uses macros to defined the MPI operations. 21515308354SBarry Smith 21615308354SBarry Smith It does not work correctly from HP-UX because it processes the 21715308354SBarry Smith macros in a way that sometimes it double counts. 218ce85283eSBarry Smith */ 21915308354SBarry Smith #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) 22077a39924SBarry Smith /* 22177a39924SBarry Smith Logging of MPI activities 22277a39924SBarry Smith */ 22377a39924SBarry Smith 22477a39924SBarry Smith #define TypeSize(buff,count,type) \ 22577a39924SBarry Smith { \ 22677a39924SBarry Smith if (type == MPIU_SCALAR) { \ 227ce85283eSBarry Smith buff += (double) ((count)*sizeof(Scalar)); \ 22877a39924SBarry Smith } else if (type == MPI_INT) { \ 229ce85283eSBarry Smith buff += (double) ((count)*sizeof(int)); \ 23077a39924SBarry Smith } else { \ 231ce85283eSBarry Smith int _size; MPI_Type_size(type,&_size); buff += (double) ((count)*_size); \ 23277a39924SBarry Smith } \ 23377a39924SBarry Smith } 23477a39924SBarry Smith 23577a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 23677a39924SBarry Smith { \ 23777a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request);\ 23877a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 23977a39924SBarry Smith } 24015308354SBarry Smith 24177a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 24277a39924SBarry Smith { \ 24377a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 244e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 24577a39924SBarry Smith } 24615308354SBarry Smith 2470d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 2480d4b0b6cSBarry Smith { \ 2490d4b0b6cSBarry Smith MPI_Startall( number, requests);\ 2500d4b0b6cSBarry Smith irecv_ct += (double)(number); irecv_len += (double) (count*sizeof(Scalar)); \ 2510d4b0b6cSBarry Smith } 2520d4b0b6cSBarry Smith 2530d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 2540d4b0b6cSBarry Smith { \ 2550d4b0b6cSBarry Smith MPI_Startall( number, requests);\ 2560d4b0b6cSBarry Smith isend_ct += (double)(number); isend_len += (double) (count*sizeof(Scalar)); \ 2570d4b0b6cSBarry Smith } 2580d4b0b6cSBarry Smith 2590d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 2600d4b0b6cSBarry Smith { \ 2610d4b0b6cSBarry Smith MPI_Start( requests);\ 2620d4b0b6cSBarry Smith isend_ct++; isend_len += (double) (count*sizeof(Scalar)); \ 2630d4b0b6cSBarry Smith } 2640d4b0b6cSBarry Smith 265ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 266ce85283eSBarry Smith { \ 267ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 268ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 269ce85283eSBarry Smith } 27015308354SBarry Smith 27177a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 27277a39924SBarry Smith { \ 27377a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 274e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 27577a39924SBarry Smith } 27677a39924SBarry Smith 27777a39924SBarry Smith #define MPI_Wait(request, status) \ 27877a39924SBarry Smith ( \ 279e0937024SBarry Smith wait_ct++, sum_of_waits_ct++,\ 28077a39924SBarry Smith MPI_Wait(request, status) \ 28177a39924SBarry Smith ) 28277a39924SBarry Smith 28377a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 28477a39924SBarry Smith ( \ 285e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 28677a39924SBarry Smith MPI_Waitany(a, b, c, d)\ 28777a39924SBarry Smith ) 28877a39924SBarry Smith 28977a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 29077a39924SBarry Smith ( \ 291ce85283eSBarry Smith wait_all_ct++, sum_of_waits_ct += (double) (count),\ 29277a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 29377a39924SBarry Smith ) 29477a39924SBarry Smith 29577a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 29677a39924SBarry Smith ( \ 29777a39924SBarry Smith allreduce_ct++, \ 29877a39924SBarry Smith MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 29977a39924SBarry Smith ) 3000d4b0b6cSBarry Smith #else 3010d4b0b6cSBarry Smith 3020d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 3030d4b0b6cSBarry Smith { \ 3040d4b0b6cSBarry Smith MPI_Startall( number, requests);\ 3050d4b0b6cSBarry Smith } 3060d4b0b6cSBarry Smith 3070d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \ 3080d4b0b6cSBarry Smith { \ 3090d4b0b6cSBarry Smith MPI_Startall( number, requests);\ 3100d4b0b6cSBarry Smith } 3110d4b0b6cSBarry Smith 3120d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \ 3130d4b0b6cSBarry Smith { \ 3140d4b0b6cSBarry Smith MPI_Start( requests);\ 3150d4b0b6cSBarry Smith } 3160d4b0b6cSBarry Smith 31715308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 318614700edSBarry Smith 319614700edSBarry Smith #else /* ------------------------------------------------------------*/ 320614700edSBarry Smith 321614700edSBarry Smith #define PLogFlops(n) 322614700edSBarry Smith 323614700edSBarry Smith #if defined (HAVE_MPE) 324614700edSBarry Smith #define MPEBEGIN 1000 325614700edSBarry Smith extern int PLogMPEBegin(); 326614700edSBarry Smith extern int PLogMPEDump(char *); 32777c4ece6SBarry Smith #else 328614700edSBarry Smith #define PLogEventMPEActivate(a) 329905e6a2fSBarry Smith #define PLogEventMPEDeactivate(a) 330614700edSBarry Smith #endif 331614700edSBarry Smith 332614700edSBarry Smith #define PLogEventActivate(a) 333905e6a2fSBarry Smith #define PLogEventDeactivate(a) 334614700edSBarry Smith 335614700edSBarry Smith #define PLogEventActivateClass() 336905e6a2fSBarry Smith #define PLogEventDeactivateClass() 33777c4ece6SBarry Smith 3387f8359c1SLois Curfman McInnes #define _PLB 0 3397f8359c1SLois Curfman McInnes #define _PLE 0 3407f8359c1SLois Curfman McInnes #define _PHC 0 3417f8359c1SLois Curfman McInnes #define _PHD 0 342e0937024SBarry Smith #define PetscGetFlops 0.0 343d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 344d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 345d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 346d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 347d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 348d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 349d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 350d7a720efSLois Curfman McInnes #define PLogDestroy() 351d7a720efSLois Curfman McInnes #define PLogStagePush(int) 352d7a720efSLois Curfman McInnes #define PLogStagePop() 353d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 354d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 355d7a720efSLois Curfman McInnes #define PLogBegin() 356d7a720efSLois Curfman McInnes #define PLogAllBegin() 357d7a720efSLois Curfman McInnes #define PLogDump(char) 358d7a720efSLois Curfman McInnes #define PLogEventRegister(a,b,c) 359d7a720efSLois Curfman McInnes #define PLogMPEBegin() 360d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 3617f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 362ce6058e1SBarry Smith 363ce6058e1SBarry Smith /* If PETSC_LOG is NOT defined, these still need to be! */ 364ce6058e1SBarry Smith #define MPI_Startall_irecv( count,number,requests) \ 365ce6058e1SBarry Smith { \ 366ce6058e1SBarry Smith MPI_Startall( number, requests);\ 367ce6058e1SBarry Smith } 368ce6058e1SBarry Smith 369ce6058e1SBarry Smith #define MPI_Startall_isend( count,number,requests) \ 370ce6058e1SBarry Smith { \ 371ce6058e1SBarry Smith MPI_Startall( number, requests);\ 372ce6058e1SBarry Smith } 373ce6058e1SBarry Smith 374ce6058e1SBarry Smith #define MPI_Start_isend(count, requests) \ 375ce6058e1SBarry Smith { \ 376ce6058e1SBarry Smith MPI_Start( requests);\ 377ce6058e1SBarry Smith } 378ce6058e1SBarry Smith #endif /* PETSC_LOG */ 3796daaf66cSBarry Smith 3808b6d568bSLois Curfman McInnes /*MC 38119b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 38219b02663SBarry Smith 38319b02663SBarry Smith Input Parameter: 38419b02663SBarry Smith . f - flop counter 38519b02663SBarry Smith 38619b02663SBarry Smith Synopsis: 387682ac3c9SWilliam Gropp void PLogFlops(int f) 38819b02663SBarry Smith 38919b02663SBarry Smith Notes: 39019b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 39119b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 39219b02663SBarry Smith application code. 39319b02663SBarry Smith 39419b02663SBarry Smith PETSc automatically logs library events if the code has been 39519b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 39619b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 39719b02663SBarry Smith intended for logging user flops to supplement this PETSc 39819b02663SBarry Smith information. 39919b02663SBarry Smith 40019b02663SBarry Smith Example of Usage: 40135aab85fSBarry Smith $ int USER_EVENT; 402b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 40319b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 40419b02663SBarry Smith $ [code segment to monitor] 40519b02663SBarry Smith $ PLogFlops(user_flops) 40619b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 40719b02663SBarry Smith 40858cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 40919b02663SBarry Smith 410edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 41119b02663SBarry Smith M*/ 41219b02663SBarry Smith 41397bb86f7SLois Curfman McInnes 414d7a720efSLois Curfman McInnes /*MC 41519b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 41697bb86f7SLois Curfman McInnes 41797bb86f7SLois Curfman McInnes Input Parameters: 41835aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 41997bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 42097bb86f7SLois Curfman McInnes 42197bb86f7SLois Curfman McInnes Synopsis: 422682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 42397bb86f7SLois Curfman McInnes PetscObject o4) 42497bb86f7SLois Curfman McInnes 42597bb86f7SLois Curfman McInnes Notes: 42697bb86f7SLois Curfman McInnes You should also register each integer event with the command 42797bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 42897bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 42997bb86f7SLois Curfman McInnes 43097bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 43197bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 43297bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 43397bb86f7SLois Curfman McInnes to supplement this PETSc information. 43497bb86f7SLois Curfman McInnes 43597bb86f7SLois Curfman McInnes Example of Usage: 43635aab85fSBarry Smith $ int USER_EVENT; 4370eb211faSLois Curfman McInnes $ int user_event_flops; 438b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 43935aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 44097bb86f7SLois Curfman McInnes $ [code segment to monitor] 4410eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 44235aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 44397bb86f7SLois Curfman McInnes 44497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 44597bb86f7SLois Curfman McInnes 44697bb86f7SLois Curfman McInnes .keywords: log, event, begin 44797bb86f7SLois Curfman McInnes M*/ 44897bb86f7SLois Curfman McInnes 449d7a720efSLois Curfman McInnes /*MC 45019b02663SBarry Smith PLogEventEnd - Log the end of a user event. 45197bb86f7SLois Curfman McInnes 45297bb86f7SLois Curfman McInnes Input Parameters: 45335aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 45497bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 45597bb86f7SLois Curfman McInnes 45697bb86f7SLois Curfman McInnes Synopsis: 457682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 45897bb86f7SLois Curfman McInnes PetscObject o4) 45997bb86f7SLois Curfman McInnes 46097bb86f7SLois Curfman McInnes Notes: 46197bb86f7SLois Curfman McInnes You should also register each integer event with the command 46297bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 46397bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 46497bb86f7SLois Curfman McInnes 46597bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 46697bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 46797bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 46897bb86f7SLois Curfman McInnes to supplement this PETSc information. 46997bb86f7SLois Curfman McInnes 47097bb86f7SLois Curfman McInnes Example of Usage: 47135aab85fSBarry Smith $ int USER_EVENT; 4720eb211faSLois Curfman McInnes $ int user_event_flops; 473b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 47497bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 47597bb86f7SLois Curfman McInnes $ [code segment to monitor] 4760eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 47797bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 47897bb86f7SLois Curfman McInnes 47997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 48097bb86f7SLois Curfman McInnes 48197bb86f7SLois Curfman McInnes .keywords: log, event, end 48297bb86f7SLois Curfman McInnes M*/ 48397bb86f7SLois Curfman McInnes 484e0937024SBarry Smith 48597bb86f7SLois Curfman McInnes #endif 48641debaddSBarry Smith 48777c4ece6SBarry Smith 48877c4ece6SBarry Smith 489