1*6d84be18SBarry Smith /* $Id: plog.h,v 1.58 1996/03/01 01:51:38 bsmith Exp bsmith $ */ 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 102b3b1b5bfSLois Curfman McInnes for applications. Make sure that src/sys/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 1166daaf66cSBarry Smith 11719b02663SBarry Smith /*M 11819b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 1196daaf66cSBarry Smith You must include "plog.h" to use this function. 12019b02663SBarry Smith 12119b02663SBarry Smith Input Parameter: 12219b02663SBarry Smith . f - flop counter 12319b02663SBarry Smith 12419b02663SBarry Smith Synopsis: 12519b02663SBarry Smith PLogFlops(int f) 12619b02663SBarry Smith 12719b02663SBarry Smith Notes: 12819b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 12919b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 13019b02663SBarry Smith application code. 13119b02663SBarry Smith 13219b02663SBarry Smith PETSc automatically logs library events if the code has been 13319b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 13419b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 13519b02663SBarry Smith intended for logging user flops to supplement this PETSc 13619b02663SBarry Smith information. 13719b02663SBarry Smith 13819b02663SBarry Smith Example of Usage: 13935aab85fSBarry Smith $ int USER_EVENT; 140*6d84be18SBarry Smith $ PLogEventRegister(&USER_EVENT,"User event","Color"); 14119b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 14219b02663SBarry Smith $ [code segment to monitor] 14319b02663SBarry Smith $ PLogFlops(user_flops) 14419b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 14519b02663SBarry Smith 14619b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 14719b02663SBarry Smith 14819b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 14919b02663SBarry Smith M*/ 15019b02663SBarry Smith 151694f041aSBarry Smith extern int PLogPrintSummary(MPI_Comm,FILE *); 15219b02663SBarry Smith extern int PLogBegin(); 15319b02663SBarry Smith extern int PLogAllBegin(); 154ec181fdcSSatish Balay extern int PLogDump(char*); 155ec181fdcSSatish Balay 156ec181fdcSSatish Balay #if defined (HAVE_MPE) 1574de1670bSSatish Balay #include "mpe.h" 158694f041aSBarry Smith extern int PLogMPEBegin(); 159633a552bSSatish Balay extern int PLogMPEDump(char *); 160694f041aSBarry Smith extern int UseMPE,MPEFlags[]; 161694f041aSBarry Smith #define MPEBEGIN 1000 162ec181fdcSSatish Balay #endif 16319b02663SBarry Smith 16497bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 16597bb86f7SLois Curfman McInnes 16697bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 16797bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 16897bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 16997bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 170*6d84be18SBarry Smith extern int PLogEventRegister(int*,char*,char*); 17197bb86f7SLois Curfman McInnes 17297bb86f7SLois Curfman McInnes /*M 17319b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 17497bb86f7SLois Curfman McInnes 17597bb86f7SLois Curfman McInnes Input Parameters: 17635aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 17797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 17897bb86f7SLois Curfman McInnes 17997bb86f7SLois Curfman McInnes Synopsis: 18097bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 18197bb86f7SLois Curfman McInnes PetscObject o4) 18297bb86f7SLois Curfman McInnes 18397bb86f7SLois Curfman McInnes Notes: 18497bb86f7SLois Curfman McInnes You should also register each integer event with the command 18597bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 18697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 18797bb86f7SLois Curfman McInnes 18897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 18997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 19097bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 19197bb86f7SLois Curfman McInnes to supplement this PETSc information. 19297bb86f7SLois Curfman McInnes 19397bb86f7SLois Curfman McInnes Example of Usage: 19435aab85fSBarry Smith $ int USER_EVENT; 1950eb211faSLois Curfman McInnes $ int user_event_flops; 196*6d84be18SBarry Smith $ PLogEventRegister(&USER_EVENT,"User event","Color"); 19735aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 19897bb86f7SLois Curfman McInnes $ [code segment to monitor] 1990eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 20035aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 20197bb86f7SLois Curfman McInnes 20297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 20397bb86f7SLois Curfman McInnes 20497bb86f7SLois Curfman McInnes .keywords: log, event, begin 20597bb86f7SLois Curfman McInnes M*/ 206694f041aSBarry Smith #if defined(HAVE_MPE) 20797bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 208694f041aSBarry Smith { _tacky++; \ 209694f041aSBarry Smith if (_PLB) \ 210694f041aSBarry Smith (*_PLB)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\ 211a2e52947SBarry Smith if (_tacky == 1 && UseMPE && MPEFlags[e])\ 212694f041aSBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 213694f041aSBarry Smith } 214694f041aSBarry Smith #else 215694f041aSBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 216694f041aSBarry Smith { _tacky++; \ 217694f041aSBarry Smith if (_PLB) \ 218694f041aSBarry Smith (*_PLB)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\ 219694f041aSBarry Smith } 220694f041aSBarry Smith #endif 22197bb86f7SLois Curfman McInnes 22297bb86f7SLois Curfman McInnes /*M 22319b02663SBarry Smith PLogEventEnd - Log the end of a user event. 22497bb86f7SLois Curfman McInnes 22597bb86f7SLois Curfman McInnes Input Parameters: 22635aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 22797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 22897bb86f7SLois Curfman McInnes 22997bb86f7SLois Curfman McInnes Synopsis: 23097bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 23197bb86f7SLois Curfman McInnes PetscObject o4) 23297bb86f7SLois Curfman McInnes 23397bb86f7SLois Curfman McInnes Notes: 23497bb86f7SLois Curfman McInnes You should also register each integer event with the command 23597bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 23697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 23797bb86f7SLois Curfman McInnes 23897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 23997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 24097bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 24197bb86f7SLois Curfman McInnes to supplement this PETSc information. 24297bb86f7SLois Curfman McInnes 24397bb86f7SLois Curfman McInnes Example of Usage: 24435aab85fSBarry Smith $ int USER_EVENT; 2450eb211faSLois Curfman McInnes $ int user_event_flops; 246*6d84be18SBarry Smith $ PLogEventRegister(&USER_EVENT,"User event","Color"); 24797bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 24897bb86f7SLois Curfman McInnes $ [code segment to monitor] 2490eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 25097bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 25197bb86f7SLois Curfman McInnes 25297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 25397bb86f7SLois Curfman McInnes 25497bb86f7SLois Curfman McInnes .keywords: log, event, end 25597bb86f7SLois Curfman McInnes M*/ 256694f041aSBarry Smith #if defined(HAVE_MPE) 257694f041aSBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 258694f041aSBarry Smith if (_PLE) \ 259694f041aSBarry Smith (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\ 260a2e52947SBarry Smith if (_tacky == 1 && UseMPE && MPEFlags[e])\ 261694f041aSBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 262694f041aSBarry Smith } _tacky--;} 263694f041aSBarry Smith #else 264694f041aSBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 265694f041aSBarry Smith if (_PLE) \ 266694f041aSBarry Smith (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\ 267694f041aSBarry Smith } _tacky--;} 268694f041aSBarry Smith #endif 269694f041aSBarry Smith 270694f041aSBarry Smith 271464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \ 272464493b3SBarry Smith PETSCVALIDHEADER((PetscObject)p);\ 273bfce26a3SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 27497bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 27597bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 27697bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 27797bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 2786ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m) {PETSCVALIDHEADER((PetscObject)p);\ 2796ac32965SLois Curfman McInnes ((PetscObject)(p))->mem += (m);} 28097bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 28197bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 282c5d91301SLois Curfman McInnes extern int PLogDestroy(); 283ba7af9b1SBarry Smith extern int PLogStagePush(int); 284ba7af9b1SBarry Smith extern int PLogStagePop(); 2854b0e389bSBarry Smith extern int PLogStageRegister(int,char*); 28697bb86f7SLois Curfman McInnes 28797bb86f7SLois Curfman McInnes #else 28897bb86f7SLois Curfman McInnes 28997bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 29097bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 291a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 29297bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 29397bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 29497bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 29597bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 29697bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 2978b23fa05SBarry Smith extern int PLogDestroy(); 298ba7af9b1SBarry Smith extern int PLogStagePush(int); 299ba7af9b1SBarry Smith extern int PLogStagePop(); 3004b0e389bSBarry Smith extern int PLogStageRegister(int,char*); 30197bb86f7SLois Curfman McInnes #endif 30297bb86f7SLois Curfman McInnes 30397bb86f7SLois Curfman McInnes #endif 30441debaddSBarry Smith 305