1*edde42fcSLois Curfman McInnes /* $Id: plog.h,v 1.63 1996/03/22 19:56:40 curfman Exp curfman $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 44c1da538SLois Curfman McInnes Defines high level 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 /* 12c43cb918SSatish Balay If you add an event here, make sure you add to petsc/bin/petscview.cfg, 13694f041aSBarry Smith petsc/bin/petscview, petsc/src/sys/src/plog.c, and 14a2e52947SBarry Smith petsc/src/sys/src/plogmpe.c!!! 1597bb86f7SLois Curfman McInnes */ 1697bb86f7SLois Curfman McInnes #define MAT_Mult 0 171ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult 1 181ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin 2 191ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd 3 201ff317f7SLois Curfman McInnes #define MAT_GetReordering 4 211ff317f7SLois Curfman McInnes #define MAT_MultTrans 5 221ff317f7SLois Curfman McInnes #define MAT_MultAdd 6 231ff317f7SLois Curfman McInnes #define MAT_MultTransAdd 7 241ff317f7SLois Curfman McInnes #define MAT_LUFactor 8 251ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor 9 261ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 10 271ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 11 281ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 12 291ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 13 301ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric 14 311ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 15 321ff317f7SLois Curfman McInnes #define MAT_Relax 16 331ff317f7SLois Curfman McInnes #define MAT_Copy 17 341ff317f7SLois Curfman McInnes #define MAT_Convert 18 351ff317f7SLois Curfman McInnes #define MAT_Scale 19 361ff317f7SLois Curfman McInnes #define MAT_ZeroEntries 20 371ff317f7SLois Curfman McInnes #define MAT_Solve 21 381ff317f7SLois Curfman McInnes #define MAT_SolveAdd 22 391ff317f7SLois Curfman McInnes #define MAT_SolveTrans 23 401ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd 24 411ff317f7SLois Curfman McInnes #define MAT_SetValues 25 421ff317f7SLois Curfman McInnes #define MAT_ForwardSolve 26 431ff317f7SLois Curfman McInnes #define MAT_BackwardSolve 27 441ff317f7SLois Curfman McInnes #define MAT_Load 28 451ff317f7SLois Curfman McInnes #define MAT_View 29 461ff317f7SLois Curfman McInnes #define MAT_ILUFactor 30 471ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix 31 481ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices 32 491ff317f7SLois Curfman McInnes #define MAT_GetValues 33 501ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap 34 51dd8bebb4SSatish Balay #define MAT_GetRow 35 5297bb86f7SLois Curfman McInnes 534dcbc457SBarry Smith #define VEC_Dot 40 544dcbc457SBarry Smith #define VEC_Norm 41 554dcbc457SBarry Smith #define VEC_Max 42 564dcbc457SBarry Smith #define VEC_Min 43 574dcbc457SBarry Smith #define VEC_TDot 44 584dcbc457SBarry Smith #define VEC_Scale 45 594dcbc457SBarry Smith #define VEC_Copy 46 604dcbc457SBarry Smith #define VEC_Set 47 614dcbc457SBarry Smith #define VEC_AXPY 48 624dcbc457SBarry Smith #define VEC_AYPX 49 634dcbc457SBarry Smith #define VEC_Swap 50 644dcbc457SBarry Smith #define VEC_WAXPY 51 654dcbc457SBarry Smith #define VEC_AssemblyBegin 52 664dcbc457SBarry Smith #define VEC_AssemblyEnd 53 674dcbc457SBarry Smith #define VEC_MTDot 54 684dcbc457SBarry Smith #define VEC_MDot 55 694dcbc457SBarry Smith #define VEC_MAXPY 56 704dcbc457SBarry Smith #define VEC_PMult 57 714dcbc457SBarry Smith #define VEC_SetValues 58 724dcbc457SBarry Smith #define VEC_Load 59 734dcbc457SBarry Smith #define VEC_View 60 744dcbc457SBarry Smith #define VEC_ScatterBegin 61 754dcbc457SBarry Smith #define VEC_ScatterEnd 62 76bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 7797bb86f7SLois Curfman McInnes 784dcbc457SBarry Smith #define SLES_Solve 70 794dcbc457SBarry Smith #define SLES_SetUp 71 8097bb86f7SLois Curfman McInnes 814dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 8297bb86f7SLois Curfman McInnes 834dcbc457SBarry Smith #define PC_SetUp 75 8436058207SBarry Smith #define PC_SetUpOnBlocks 76 8532284f49SSatish Balay #define PC_Apply 77 8632284f49SSatish Balay #define PC_ApplySymmLeft 78 8732284f49SSatish Balay #define PC_ApplySymmRight 79 884dcbc457SBarry Smith 894dcbc457SBarry Smith #define SNES_Solve 80 904dcbc457SBarry Smith #define SNES_LineSearch 81 914dcbc457SBarry Smith #define SNES_FunctionEval 82 924dcbc457SBarry Smith #define SNES_JacobianEval 83 934dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 944dcbc457SBarry Smith #define SNES_GradientEval 85 954dcbc457SBarry Smith #define SNES_HessianEval 86 964dcbc457SBarry Smith 97682d7d0cSBarry Smith #define TS_Step 90 9872936c9dSBarry Smith 9972936c9dSBarry Smith #define Petsc_Barrier 100 10041debaddSBarry Smith /* 101b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 10277c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 103b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 10441debaddSBarry Smith */ 10535aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1064dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 10797bb86f7SLois Curfman McInnes 10819b02663SBarry Smith /* Global flop counter */ 10919b02663SBarry Smith extern double _TotalFlops; 11019b02663SBarry Smith #if defined(PETSC_LOG) 11119b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 11219b02663SBarry Smith #else 11319b02663SBarry Smith #define PLogFlops(n) 11419b02663SBarry Smith #endif 11519b02663SBarry Smith 116*edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 117*edde42fcSLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 11877c4ece6SBarry Smith 11977c4ece6SBarry Smith #if defined (HAVE_MPE) 12077c4ece6SBarry Smith #include "mpe.h" 12177c4ece6SBarry Smith extern int PLogMPEBegin(); 12277c4ece6SBarry Smith extern int PLogMPEDump(char *); 12377c4ece6SBarry Smith extern int UseMPE,MPEFlags[]; 12477c4ece6SBarry Smith #define MPEBEGIN 1000 12577c4ece6SBarry Smith #endif 12677c4ece6SBarry Smith 12777c4ece6SBarry Smith #if defined(PETSC_LOG) 12877c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 12977c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 13077c4ece6SBarry Smith extern int (*_PHC)(PetscObject); 13177c4ece6SBarry Smith extern int (*_PHD)(PetscObject); 13277c4ece6SBarry Smith 13377c4ece6SBarry Smith #if defined(HAVE_MPE) 13477c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 13577c4ece6SBarry Smith { _tacky++; \ 13677c4ece6SBarry Smith if (_PLB) \ 13777c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 13877c4ece6SBarry Smith if (_tacky == 1 && UseMPE && MPEFlags[e])\ 13977c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 14077c4ece6SBarry Smith } 14177c4ece6SBarry Smith #else 14277c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 14377c4ece6SBarry Smith { _tacky++; \ 14477c4ece6SBarry Smith if (_PLB) \ 14577c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 14677c4ece6SBarry Smith } 14777c4ece6SBarry Smith #endif 14877c4ece6SBarry Smith 14977c4ece6SBarry Smith #if defined(HAVE_MPE) 15077c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 15177c4ece6SBarry Smith if (_PLE) \ 15277c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 15377c4ece6SBarry Smith if (_tacky == 1 && UseMPE && MPEFlags[e])\ 15477c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 15577c4ece6SBarry Smith } _tacky--;} 15677c4ece6SBarry Smith #else 15777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 15877c4ece6SBarry Smith if (_PLE) \ 15977c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 16077c4ece6SBarry Smith } _tacky--;} 16177c4ece6SBarry Smith #endif 16277c4ece6SBarry Smith 16377c4ece6SBarry Smith 16477c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 16577c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 16677c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 16777c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 16877c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 16977c4ece6SBarry Smith #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 17077c4ece6SBarry Smith #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 17177c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 17277c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 17377c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 17477c4ece6SBarry Smith extern int PLogDestroy(); 17577c4ece6SBarry Smith extern int PLogStagePush(int); 17677c4ece6SBarry Smith extern int PLogStagePop(); 17777c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 178*edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *); 179*edde42fcSLois Curfman McInnes extern int PLogBegin(); 180*edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 181*edde42fcSLois Curfman McInnes extern int PLogDump(char*); 182*edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 18377c4ece6SBarry Smith 18477c4ece6SBarry Smith #else 18577c4ece6SBarry Smith 18677c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) 18777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) 18877c4ece6SBarry Smith #define PLogObjectParent(p,c) 18977c4ece6SBarry Smith #define PLogObjectParents(p,n,c) 190*edde42fcSLois Curfman McInnes #define PLogObjectCreate(h) 191*edde42fcSLois Curfman McInnes #define PLogObjectDestroy(h) 192*edde42fcSLois Curfman McInnes #define PLogObjectMemory(p,m) 193*edde42fcSLois Curfman McInnes /* #define PLogObjectState(a,b,...) */ 194*edde42fcSLois Curfman McInnes #define PLogDestroy() 195*edde42fcSLois Curfman McInnes #define PLogStagePush(int) 196*edde42fcSLois Curfman McInnes #define PLogStagePop() 197*edde42fcSLois Curfman McInnes #define PLogStageRegister(a,b) 198*edde42fcSLois Curfman McInnes #define PLogPrintSummary(comm,file) 199*edde42fcSLois Curfman McInnes #define PLogBegin() 200*edde42fcSLois Curfman McInnes #define PLogAllBegin() 201*edde42fcSLois Curfman McInnes #define PLogDump(char) 202*edde42fcSLois Curfman McInnes #define PLogEventRegister(a,b,c) 203*edde42fcSLois Curfman McInnes #define PLogMPEBegin() 204*edde42fcSLois Curfman McInnes #define PLogMPEDump(a) 205*edde42fcSLois Curfman McInnes 20677c4ece6SBarry Smith #endif 2076daaf66cSBarry Smith 20819b02663SBarry Smith /*M 20919b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 21019b02663SBarry Smith 21119b02663SBarry Smith Input Parameter: 21219b02663SBarry Smith . f - flop counter 21319b02663SBarry Smith 21419b02663SBarry Smith Synopsis: 215682ac3c9SWilliam Gropp void PLogFlops(int f) 21619b02663SBarry Smith 21719b02663SBarry Smith Notes: 21819b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 21919b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 22019b02663SBarry Smith application code. 22119b02663SBarry Smith 22219b02663SBarry Smith PETSc automatically logs library events if the code has been 22319b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 22419b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 22519b02663SBarry Smith intended for logging user flops to supplement this PETSc 22619b02663SBarry Smith information. 22719b02663SBarry Smith 22819b02663SBarry Smith Example of Usage: 22935aab85fSBarry Smith $ int USER_EVENT; 230b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 23119b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 23219b02663SBarry Smith $ [code segment to monitor] 23319b02663SBarry Smith $ PLogFlops(user_flops) 23419b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 23519b02663SBarry Smith 23619b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 23719b02663SBarry Smith 238*edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 23919b02663SBarry Smith M*/ 24019b02663SBarry Smith 24197bb86f7SLois Curfman McInnes 24297bb86f7SLois Curfman McInnes /*M 24319b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 24497bb86f7SLois Curfman McInnes 24597bb86f7SLois Curfman McInnes Input Parameters: 24635aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 24797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 24897bb86f7SLois Curfman McInnes 24997bb86f7SLois Curfman McInnes Synopsis: 250682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 25197bb86f7SLois Curfman McInnes PetscObject o4) 25297bb86f7SLois Curfman McInnes 25397bb86f7SLois Curfman McInnes Notes: 25497bb86f7SLois Curfman McInnes You should also register each integer event with the command 25597bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 25697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 25797bb86f7SLois Curfman McInnes 25897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 25997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 26097bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 26197bb86f7SLois Curfman McInnes to supplement this PETSc information. 26297bb86f7SLois Curfman McInnes 26397bb86f7SLois Curfman McInnes Example of Usage: 26435aab85fSBarry Smith $ int USER_EVENT; 2650eb211faSLois Curfman McInnes $ int user_event_flops; 266b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 26735aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 26897bb86f7SLois Curfman McInnes $ [code segment to monitor] 2690eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 27035aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 27197bb86f7SLois Curfman McInnes 27297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 27397bb86f7SLois Curfman McInnes 27497bb86f7SLois Curfman McInnes .keywords: log, event, begin 27597bb86f7SLois Curfman McInnes M*/ 27697bb86f7SLois Curfman McInnes 27797bb86f7SLois Curfman McInnes /*M 27819b02663SBarry Smith PLogEventEnd - Log the end of a user event. 27997bb86f7SLois Curfman McInnes 28097bb86f7SLois Curfman McInnes Input Parameters: 28135aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 28297bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 28397bb86f7SLois Curfman McInnes 28497bb86f7SLois Curfman McInnes Synopsis: 285682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 28697bb86f7SLois Curfman McInnes PetscObject o4) 28797bb86f7SLois Curfman McInnes 28897bb86f7SLois Curfman McInnes Notes: 28997bb86f7SLois Curfman McInnes You should also register each integer event with the command 29097bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 29197bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 29297bb86f7SLois Curfman McInnes 29397bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 29497bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 29597bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 29697bb86f7SLois Curfman McInnes to supplement this PETSc information. 29797bb86f7SLois Curfman McInnes 29897bb86f7SLois Curfman McInnes Example of Usage: 29935aab85fSBarry Smith $ int USER_EVENT; 3000eb211faSLois Curfman McInnes $ int user_event_flops; 301b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 30297bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 30397bb86f7SLois Curfman McInnes $ [code segment to monitor] 3040eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 30597bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 30697bb86f7SLois Curfman McInnes 30797bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 30897bb86f7SLois Curfman McInnes 30997bb86f7SLois Curfman McInnes .keywords: log, event, end 31097bb86f7SLois Curfman McInnes M*/ 31197bb86f7SLois Curfman McInnes 31297bb86f7SLois Curfman McInnes #endif 31341debaddSBarry Smith 31477c4ece6SBarry Smith 31577c4ece6SBarry Smith 316