1*15308354SBarry Smith /* $Id: plog.h,v 1.79 1996/08/05 04:02:09 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 521ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix 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 884dcbc457SBarry Smith #define PC_SetUp 75 8936058207SBarry Smith #define PC_SetUpOnBlocks 76 9032284f49SSatish Balay #define PC_Apply 77 91614700edSBarry Smith #define PC_ApplySymmetricLeft 78 92614700edSBarry Smith #define PC_ApplySymmetricRight 79 934dcbc457SBarry Smith 944dcbc457SBarry Smith #define SNES_Solve 80 954dcbc457SBarry Smith #define SNES_LineSearch 81 964dcbc457SBarry Smith #define SNES_FunctionEval 82 974dcbc457SBarry Smith #define SNES_JacobianEval 83 984dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 994dcbc457SBarry Smith #define SNES_GradientEval 85 1004dcbc457SBarry Smith #define SNES_HessianEval 86 1014dcbc457SBarry Smith 102682d7d0cSBarry Smith #define TS_Step 90 10372936c9dSBarry Smith 10472936c9dSBarry Smith #define Petsc_Barrier 100 10555206aebSLois Curfman McInnes 10655206aebSLois Curfman McInnes #define DFVec_RefineVector 110 10755206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 10855206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 10955206aebSLois Curfman McInnes #define DFVec_DrawContours 113 11055206aebSLois Curfman McInnes 11141debaddSBarry Smith /* 112b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 11377c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 114b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 11541debaddSBarry Smith */ 11635aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1174dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 11897bb86f7SLois Curfman McInnes 11919b02663SBarry Smith /* Global flop counter */ 12019b02663SBarry Smith extern double _TotalFlops; 12119b02663SBarry Smith 122edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 12394a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 124cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int); 125614700edSBarry Smith extern int PLogInfoActivateClass(int); 126614700edSBarry Smith 127614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 128614700edSBarry Smith 129a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);} 13077c4ece6SBarry Smith 13177c4ece6SBarry Smith #if defined (HAVE_MPE) 13277c4ece6SBarry Smith #include "mpe.h" 133614700edSBarry Smith #define MPEBEGIN 1000 13477c4ece6SBarry Smith extern int PLogMPEBegin(); 13577c4ece6SBarry Smith extern int PLogMPEDump(char *); 136614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 137614700edSBarry Smith extern int PLogEventMPEActivate(int); 138614700edSBarry Smith extern int PLogEventMPEDeActivate(int); 139614700edSBarry Smith #else 140614700edSBarry Smith #define PLogEventMPEActivate(a) 141614700edSBarry Smith #define PLogEventMPEDeActivate(a) 14277c4ece6SBarry Smith #endif 14377c4ece6SBarry Smith 144614700edSBarry Smith extern int PLogEventActivate(int); 145614700edSBarry Smith extern int PLogEventDeActivate(int); 146614700edSBarry Smith 147614700edSBarry Smith extern int PLogEventActivateClass(); 148614700edSBarry Smith extern int PLogEventDeActivateClass(); 149614700edSBarry Smith 150614700edSBarry Smith extern int PLogEventFlags[]; 15177c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15277c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15377c4ece6SBarry Smith extern int (*_PHC)(PetscObject); 15477c4ece6SBarry Smith extern int (*_PHD)(PetscObject); 15577c4ece6SBarry Smith 15677c4ece6SBarry Smith #if defined(HAVE_MPE) 15777c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 15877c4ece6SBarry Smith { _tacky++; \ 159614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 16077c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 161614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 16277c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 16377c4ece6SBarry Smith } 16477c4ece6SBarry Smith #else 16577c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 16677c4ece6SBarry Smith { _tacky++; \ 167614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 16877c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 16977c4ece6SBarry Smith } 17077c4ece6SBarry Smith #endif 17177c4ece6SBarry Smith 17277c4ece6SBarry Smith #if defined(HAVE_MPE) 17377c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 174614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 17577c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 176614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 17777c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 17877c4ece6SBarry Smith } _tacky--;} 17977c4ece6SBarry Smith #else 18077c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 181614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 18277c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 18377c4ece6SBarry Smith } _tacky--;} 18477c4ece6SBarry Smith #endif 18577c4ece6SBarry Smith 18677c4ece6SBarry Smith 18777c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 18877c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 18977c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 19077c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 19177c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 19277c4ece6SBarry Smith #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 19377c4ece6SBarry Smith #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 19477c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 19577c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 19677c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 19777c4ece6SBarry Smith extern int PLogDestroy(); 19877c4ece6SBarry Smith extern int PLogStagePush(int); 19977c4ece6SBarry Smith extern int PLogStagePop(); 20077c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 201edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *); 202edde42fcSLois Curfman McInnes extern int PLogBegin(); 203edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 204edde42fcSLois Curfman McInnes extern int PLogDump(char*); 205edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 206e0937024SBarry Smith extern double PetscGetFlops(); 20777c4ece6SBarry Smith 208ce85283eSBarry Smith /* 209ce85283eSBarry Smith This does not use for MPI-Uni because our src/mpiuni/mpi.h file 210ce85283eSBarry Smith uses macros to defined the MPI operations. 211*15308354SBarry Smith 212*15308354SBarry Smith It does not work correctly from HP-UX because it processes the 213*15308354SBarry Smith macros in a way that sometimes it double counts. 214ce85283eSBarry Smith */ 215*15308354SBarry Smith #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux) 21677a39924SBarry Smith /* 21777a39924SBarry Smith Logging of MPI activities 21877a39924SBarry Smith */ 219e0937024SBarry Smith extern double irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct; 220e0937024SBarry Smith extern double irecv_len, isend_len, recv_len, send_len; 221e0937024SBarry Smith extern double wait_all_ct,allreduce_ct,sum_of_waits_ct; 22277a39924SBarry Smith 22377a39924SBarry Smith #define TypeSize(buff,count,type) \ 22477a39924SBarry Smith { \ 22577a39924SBarry Smith if (type == MPIU_SCALAR) { \ 226ce85283eSBarry Smith buff += (double) ((count)*sizeof(Scalar)); \ 22777a39924SBarry Smith } else if (type == MPI_INT) { \ 228ce85283eSBarry Smith buff += (double) ((count)*sizeof(int)); \ 22977a39924SBarry Smith } else { \ 230ce85283eSBarry Smith int _size; MPI_Type_size(type,&_size); buff += (double) ((count)*_size); \ 23177a39924SBarry Smith } \ 23277a39924SBarry Smith } 23377a39924SBarry Smith 23477a39924SBarry Smith #define MPI_Irecv( buf, count, datatype, source, tag, comm, request) \ 23577a39924SBarry Smith { \ 23677a39924SBarry Smith MPI_Irecv( buf, count, datatype, source, tag, comm, request);\ 23777a39924SBarry Smith irecv_ct++; TypeSize(irecv_len,count,datatype); \ 23877a39924SBarry Smith } 239*15308354SBarry Smith 24077a39924SBarry Smith #define MPI_Isend( buf, count, datatype, dest, tag, comm, request) \ 24177a39924SBarry Smith { \ 24277a39924SBarry Smith MPI_Isend( buf, count, datatype, dest, tag, comm, request); \ 243e0937024SBarry Smith isend_ct++; TypeSize(isend_len,count,datatype); \ 24477a39924SBarry Smith } 245*15308354SBarry Smith 246ce85283eSBarry Smith #define MPI_Recv( buf, count, datatype, source, tag, comm, status) \ 247ce85283eSBarry Smith { \ 248ce85283eSBarry Smith MPI_Recv( buf, count, datatype, source, tag, comm, status); \ 249ce85283eSBarry Smith recv_ct++; TypeSize(recv_len,count,datatype); \ 250ce85283eSBarry Smith } 251*15308354SBarry Smith 25277a39924SBarry Smith #define MPI_Send( buf, count, datatype, dest, tag, comm) \ 25377a39924SBarry Smith { \ 25477a39924SBarry Smith MPI_Send( buf, count, datatype, dest, tag, comm); \ 255e0937024SBarry Smith send_ct++; TypeSize(send_len,count,datatype); \ 25677a39924SBarry Smith } 25777a39924SBarry Smith 25877a39924SBarry Smith #define MPI_Wait(request, status) \ 25977a39924SBarry Smith ( \ 260e0937024SBarry Smith wait_ct++, sum_of_waits_ct++,\ 26177a39924SBarry Smith MPI_Wait(request, status) \ 26277a39924SBarry Smith ) 26377a39924SBarry Smith 26477a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \ 26577a39924SBarry Smith ( \ 266e0937024SBarry Smith wait_any_ct++, sum_of_waits_ct++, \ 26777a39924SBarry Smith MPI_Waitany(a, b, c, d)\ 26877a39924SBarry Smith ) 26977a39924SBarry Smith 27077a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \ 27177a39924SBarry Smith ( \ 272ce85283eSBarry Smith wait_all_ct++, sum_of_waits_ct += (double) (count),\ 27377a39924SBarry Smith MPI_Waitall(count, array_of_requests, array_of_statuses) \ 27477a39924SBarry Smith ) 27577a39924SBarry Smith 27677a39924SBarry Smith #define MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 27777a39924SBarry Smith ( \ 27877a39924SBarry Smith allreduce_ct++, \ 27977a39924SBarry Smith MPI_Allreduce( sendbuf, recvbuf, count, datatype, op, comm) \ 28077a39924SBarry Smith ) 281*15308354SBarry Smith #endif /* ! PETSC_USING_MPIUNI && ! PARCH_hpux */ 282614700edSBarry Smith 283614700edSBarry Smith #else /* ------------------------------------------------------------*/ 284614700edSBarry Smith 285614700edSBarry Smith #define PLogFlops(n) 286614700edSBarry Smith 287614700edSBarry Smith #if defined (HAVE_MPE) 288614700edSBarry Smith #define MPEBEGIN 1000 289614700edSBarry Smith extern int PLogMPEBegin(); 290614700edSBarry Smith extern int PLogMPEDump(char *); 29177c4ece6SBarry Smith #else 292614700edSBarry Smith #define PLogEventMPEActivate(a) 293614700edSBarry Smith #define PLogEventMPEDeActivate(a) 294614700edSBarry Smith #endif 295614700edSBarry Smith 296614700edSBarry Smith #define PLogEventActivate(a) 297614700edSBarry Smith #define PLogEventDeActivate(a) 298614700edSBarry Smith 299614700edSBarry Smith #define PLogEventActivateClass() 300614700edSBarry Smith #define PLogEventDeActivateClass() 30177c4ece6SBarry Smith 3027f8359c1SLois Curfman McInnes #define _PLB 0 3037f8359c1SLois Curfman McInnes #define _PLE 0 3047f8359c1SLois Curfman McInnes #define _PHC 0 3057f8359c1SLois Curfman McInnes #define _PHD 0 306e0937024SBarry Smith #define PetscGetFlops 0.0 307d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 308d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 309d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 310d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 311d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 312d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 313d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 314d7a720efSLois Curfman McInnes #define PLogDestroy() 315d7a720efSLois Curfman McInnes #define PLogStagePush(int) 316d7a720efSLois Curfman McInnes #define PLogStagePop() 317d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 318d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 319d7a720efSLois Curfman McInnes #define PLogBegin() 320d7a720efSLois Curfman McInnes #define PLogAllBegin() 321d7a720efSLois Curfman McInnes #define PLogDump(char) 322d7a720efSLois Curfman McInnes #define PLogEventRegister(a,b,c) 323d7a720efSLois Curfman McInnes #define PLogMPEBegin() 324d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 3257f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 32677c4ece6SBarry Smith #endif 3276daaf66cSBarry Smith 3288b6d568bSLois Curfman McInnes /*MC 32919b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 33019b02663SBarry Smith 33119b02663SBarry Smith Input Parameter: 33219b02663SBarry Smith . f - flop counter 33319b02663SBarry Smith 33419b02663SBarry Smith Synopsis: 335682ac3c9SWilliam Gropp void PLogFlops(int f) 33619b02663SBarry Smith 33719b02663SBarry Smith Notes: 33819b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 33919b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 34019b02663SBarry Smith application code. 34119b02663SBarry Smith 34219b02663SBarry Smith PETSc automatically logs library events if the code has been 34319b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 34419b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 34519b02663SBarry Smith intended for logging user flops to supplement this PETSc 34619b02663SBarry Smith information. 34719b02663SBarry Smith 34819b02663SBarry Smith Example of Usage: 34935aab85fSBarry Smith $ int USER_EVENT; 350b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 35119b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 35219b02663SBarry Smith $ [code segment to monitor] 35319b02663SBarry Smith $ PLogFlops(user_flops) 35419b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 35519b02663SBarry Smith 35658cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 35719b02663SBarry Smith 358edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 35919b02663SBarry Smith M*/ 36019b02663SBarry Smith 36197bb86f7SLois Curfman McInnes 362d7a720efSLois Curfman McInnes /*MC 36319b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 36497bb86f7SLois Curfman McInnes 36597bb86f7SLois Curfman McInnes Input Parameters: 36635aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 36797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 36897bb86f7SLois Curfman McInnes 36997bb86f7SLois Curfman McInnes Synopsis: 370682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 37197bb86f7SLois Curfman McInnes PetscObject o4) 37297bb86f7SLois Curfman McInnes 37397bb86f7SLois Curfman McInnes Notes: 37497bb86f7SLois Curfman McInnes You should also register each integer event with the command 37597bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 37697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 37797bb86f7SLois Curfman McInnes 37897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 37997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 38097bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 38197bb86f7SLois Curfman McInnes to supplement this PETSc information. 38297bb86f7SLois Curfman McInnes 38397bb86f7SLois Curfman McInnes Example of Usage: 38435aab85fSBarry Smith $ int USER_EVENT; 3850eb211faSLois Curfman McInnes $ int user_event_flops; 386b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 38735aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 38897bb86f7SLois Curfman McInnes $ [code segment to monitor] 3890eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 39035aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 39197bb86f7SLois Curfman McInnes 39297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 39397bb86f7SLois Curfman McInnes 39497bb86f7SLois Curfman McInnes .keywords: log, event, begin 39597bb86f7SLois Curfman McInnes M*/ 39697bb86f7SLois Curfman McInnes 397d7a720efSLois Curfman McInnes /*MC 39819b02663SBarry Smith PLogEventEnd - Log the end of a user event. 39997bb86f7SLois Curfman McInnes 40097bb86f7SLois Curfman McInnes Input Parameters: 40135aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 40297bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 40397bb86f7SLois Curfman McInnes 40497bb86f7SLois Curfman McInnes Synopsis: 405682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 40697bb86f7SLois Curfman McInnes PetscObject o4) 40797bb86f7SLois Curfman McInnes 40897bb86f7SLois Curfman McInnes Notes: 40997bb86f7SLois Curfman McInnes You should also register each integer event with the command 41097bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 41197bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 41297bb86f7SLois Curfman McInnes 41397bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 41497bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 41597bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 41697bb86f7SLois Curfman McInnes to supplement this PETSc information. 41797bb86f7SLois Curfman McInnes 41897bb86f7SLois Curfman McInnes Example of Usage: 41935aab85fSBarry Smith $ int USER_EVENT; 4200eb211faSLois Curfman McInnes $ int user_event_flops; 421b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 42297bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 42397bb86f7SLois Curfman McInnes $ [code segment to monitor] 4240eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 42597bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 42697bb86f7SLois Curfman McInnes 42797bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 42897bb86f7SLois Curfman McInnes 42997bb86f7SLois Curfman McInnes .keywords: log, event, end 43097bb86f7SLois Curfman McInnes M*/ 43197bb86f7SLois Curfman McInnes 432e0937024SBarry Smith 43397bb86f7SLois Curfman McInnes #endif 43441debaddSBarry Smith 43577c4ece6SBarry Smith 43677c4ece6SBarry Smith 437