1*4dcbc457SBarry Smith /* $Id: plog.h,v 1.27 1995/11/19 23:30:57 bsmith Exp bsmith $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 497bb86f7SLois 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 /* 12bd3b412fSLois Curfman McInnes If you add an event here, make sure you add to petsc/bin/petscview.cfg 13bd3b412fSLois Curfman McInnes and petsc/src/sys/src/plog.c!! 1497bb86f7SLois Curfman McInnes */ 1597bb86f7SLois Curfman McInnes #define MAT_Mult 0 166f1e8a0fSLois Curfman McInnes #define MAT_AssemblyBegin 1 176f1e8a0fSLois Curfman McInnes #define MAT_AssemblyEnd 2 1897bb86f7SLois Curfman McInnes #define MAT_GetReordering 3 1997bb86f7SLois Curfman McInnes #define MAT_MultTrans 4 2097bb86f7SLois Curfman McInnes #define MAT_MultAdd 5 2197bb86f7SLois Curfman McInnes #define MAT_MultTransAdd 6 2297bb86f7SLois Curfman McInnes #define MAT_LUFactor 7 2397bb86f7SLois Curfman McInnes #define MAT_CholeskyFactor 8 2497bb86f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 9 2597bb86f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 10 2697bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 11 2797bb86f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 12 2897bb86f7SLois Curfman McInnes #define MAT_LUFactorNumeric 13 2997bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 14 3097bb86f7SLois Curfman McInnes #define MAT_Relax 15 3197bb86f7SLois Curfman McInnes #define MAT_Copy 16 3297bb86f7SLois Curfman McInnes #define MAT_Convert 17 3397bb86f7SLois Curfman McInnes #define MAT_Scale 18 3497bb86f7SLois Curfman McInnes #define MAT_ZeroEntries 19 3597bb86f7SLois Curfman McInnes #define MAT_Solve 20 3697bb86f7SLois Curfman McInnes #define MAT_SolveAdd 21 3797bb86f7SLois Curfman McInnes #define MAT_SolveTrans 22 3897bb86f7SLois Curfman McInnes #define MAT_SolveTransAdd 23 3997bb86f7SLois Curfman McInnes #define MAT_SetValues 24 40891de242SLois Curfman McInnes #define MAT_ForwardSolve 25 41891de242SLois Curfman McInnes #define MAT_BackwardSolve 26 42acac4784SBarry Smith #define MAT_Load 27 43acac4784SBarry Smith #define MAT_View 28 4402834360SBarry Smith #define MAT_ILUFactor 29 45*4dcbc457SBarry Smith #define MAT_GetSubMatrix 30 46*4dcbc457SBarry Smith #define MAT_GetSubMatrices 31 4797bb86f7SLois Curfman McInnes 48*4dcbc457SBarry Smith #define VEC_Dot 40 49*4dcbc457SBarry Smith #define VEC_Norm 41 50*4dcbc457SBarry Smith #define VEC_Max 42 51*4dcbc457SBarry Smith #define VEC_Min 43 52*4dcbc457SBarry Smith #define VEC_TDot 44 53*4dcbc457SBarry Smith #define VEC_Scale 45 54*4dcbc457SBarry Smith #define VEC_Copy 46 55*4dcbc457SBarry Smith #define VEC_Set 47 56*4dcbc457SBarry Smith #define VEC_AXPY 48 57*4dcbc457SBarry Smith #define VEC_AYPX 49 58*4dcbc457SBarry Smith #define VEC_Swap 50 59*4dcbc457SBarry Smith #define VEC_WAXPY 51 60*4dcbc457SBarry Smith #define VEC_AssemblyBegin 52 61*4dcbc457SBarry Smith #define VEC_AssemblyEnd 53 62*4dcbc457SBarry Smith #define VEC_MTDot 54 63*4dcbc457SBarry Smith #define VEC_MDot 55 64*4dcbc457SBarry Smith #define VEC_MAXPY 56 65*4dcbc457SBarry Smith #define VEC_PMult 57 66*4dcbc457SBarry Smith #define VEC_SetValues 58 67*4dcbc457SBarry Smith #define VEC_Load 59 68*4dcbc457SBarry Smith #define VEC_View 60 69*4dcbc457SBarry Smith #define VEC_ScatterBegin 61 70*4dcbc457SBarry Smith #define VEC_ScatterEnd 62 7197bb86f7SLois Curfman McInnes 72*4dcbc457SBarry Smith #define SLES_Solve 70 73*4dcbc457SBarry Smith #define SLES_SetUp 71 7497bb86f7SLois Curfman McInnes 75*4dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 76*4dcbc457SBarry Smith #define KSP_Solve 73 7797bb86f7SLois Curfman McInnes 78*4dcbc457SBarry Smith #define PC_SetUp 75 79*4dcbc457SBarry Smith #define PC_Apply 76 80*4dcbc457SBarry Smith 81*4dcbc457SBarry Smith #define SNES_Solve 80 82*4dcbc457SBarry Smith #define SNES_LineSearch 81 83*4dcbc457SBarry Smith #define SNES_FunctionEval 82 84*4dcbc457SBarry Smith #define SNES_JacobianEval 83 85*4dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 86*4dcbc457SBarry Smith #define SNES_GradientEval 85 87*4dcbc457SBarry Smith #define SNES_HessianEval 86 88*4dcbc457SBarry Smith 8902834360SBarry Smith 9041debaddSBarry Smith /* 91*4dcbc457SBarry Smith event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 92*4dcbc457SBarry Smith for applications, make sure that src/sys/src/plog.c defines enough entries 93*4dcbc457SBarry Smith in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 9441debaddSBarry Smith */ 95*4dcbc457SBarry Smith #define PLOG_USER_EVENT_LOW 120 96*4dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 9797bb86f7SLois Curfman McInnes 9819b02663SBarry Smith /* Global flop counter */ 9919b02663SBarry Smith extern double _TotalFlops; 10019b02663SBarry Smith #if defined(PETSC_LOG) 10119b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 10219b02663SBarry Smith #else 10319b02663SBarry Smith #define PLogFlops(n) 10419b02663SBarry Smith #endif 10519b02663SBarry Smith 10619b02663SBarry Smith /*M 10719b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 10819b02663SBarry Smith 10919b02663SBarry Smith Input Parameter: 11019b02663SBarry Smith . f - flop counter 11119b02663SBarry Smith 11219b02663SBarry Smith Synopsis: 11319b02663SBarry Smith PLogFlops(int f) 11419b02663SBarry Smith 11519b02663SBarry Smith Notes: 11619b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 11719b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 11819b02663SBarry Smith application code. 11919b02663SBarry Smith 12019b02663SBarry Smith PETSc automatically logs library events if the code has been 12119b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 12219b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 12319b02663SBarry Smith intended for logging user flops to supplement this PETSc 12419b02663SBarry Smith information. 12519b02663SBarry Smith 12619b02663SBarry Smith Example of Usage: 12741debaddSBarry Smith $ #define USER_EVENT PLOG_USER_EVENT_LOW 12819b02663SBarry Smith $ PLogEventRegister(USER_EVENT,"User event"); 12919b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 13019b02663SBarry Smith $ [code segment to monitor] 13119b02663SBarry Smith $ PLogFlops(user_flops) 13219b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 13319b02663SBarry Smith 13419b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 13519b02663SBarry Smith 13619b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 13719b02663SBarry Smith M*/ 13819b02663SBarry Smith 13919b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 14019b02663SBarry Smith extern int PLogBegin(); 14119b02663SBarry Smith extern int PLogAllBegin(); 14219b02663SBarry Smith extern int PLogDump(char*); 14319b02663SBarry Smith 14497bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 14597bb86f7SLois Curfman McInnes 14697bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 14797bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 14897bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 14997bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 15097bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 15197bb86f7SLois Curfman McInnes 15297bb86f7SLois Curfman McInnes /*M 15319b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 15497bb86f7SLois Curfman McInnes 15597bb86f7SLois Curfman McInnes Input Parameters: 15641debaddSBarry Smith . e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH) 15797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 15897bb86f7SLois Curfman McInnes 15997bb86f7SLois Curfman McInnes Synopsis: 16097bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 16197bb86f7SLois Curfman McInnes PetscObject o4) 16297bb86f7SLois Curfman McInnes 16397bb86f7SLois Curfman McInnes Notes: 16497bb86f7SLois Curfman McInnes You should also register each integer event with the command 16597bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 16697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 16797bb86f7SLois Curfman McInnes 16897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 16997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 17097bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 17197bb86f7SLois Curfman McInnes to supplement this PETSc information. 17297bb86f7SLois Curfman McInnes 17397bb86f7SLois Curfman McInnes Example of Usage: 17441debaddSBarry Smith $ #define USER_EVENT PLOG_USER_EVENT_LOW 1750eb211faSLois Curfman McInnes $ int user_event_flops; 17697bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 17797bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 17897bb86f7SLois Curfman McInnes $ [code segment to monitor] 1790eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 18097bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 18197bb86f7SLois Curfman McInnes 18297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 18397bb86f7SLois Curfman McInnes 18497bb86f7SLois Curfman McInnes .keywords: log, event, begin 18597bb86f7SLois Curfman McInnes M*/ 18697bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 18797bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 18897bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 18997bb86f7SLois Curfman McInnes 19097bb86f7SLois Curfman McInnes /*M 19119b02663SBarry Smith PLogEventEnd - Log the end of a user event. 19297bb86f7SLois Curfman McInnes 19397bb86f7SLois Curfman McInnes Input Parameters: 19441debaddSBarry Smith . e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH) 19597bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 19697bb86f7SLois Curfman McInnes 19797bb86f7SLois Curfman McInnes Synopsis: 19897bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 19997bb86f7SLois Curfman McInnes PetscObject o4) 20097bb86f7SLois Curfman McInnes 20197bb86f7SLois Curfman McInnes Notes: 20297bb86f7SLois Curfman McInnes You should also register each integer event with the command 20397bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 20497bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 20597bb86f7SLois Curfman McInnes 20697bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 20797bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 20897bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 20997bb86f7SLois Curfman McInnes to supplement this PETSc information. 21097bb86f7SLois Curfman McInnes 21197bb86f7SLois Curfman McInnes Example of Usage: 21241debaddSBarry Smith $ #define USER_EVENT PLOG_EVENT_USER_LOW 2130eb211faSLois Curfman McInnes $ int user_event_flops; 21497bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 21597bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 21697bb86f7SLois Curfman McInnes $ [code segment to monitor] 2170eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 21897bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 21997bb86f7SLois Curfman McInnes 22097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 22197bb86f7SLois Curfman McInnes 22297bb86f7SLois Curfman McInnes .keywords: log, event, end 22397bb86f7SLois Curfman McInnes M*/ 224416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\ 225416022c9SBarry Smith (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\ 226416022c9SBarry Smith _tacky--;} 227464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \ 228464493b3SBarry Smith PETSCVALIDHEADER((PetscObject)p);\ 229bfce26a3SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 23097bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 23197bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 23297bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 23397bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 2346ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m) {PETSCVALIDHEADER((PetscObject)p);\ 2356ac32965SLois Curfman McInnes ((PetscObject)(p))->mem += (m);} 23697bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 23797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 238c5d91301SLois Curfman McInnes extern int PLogDestroy(); 23997bb86f7SLois Curfman McInnes 24097bb86f7SLois Curfman McInnes #else 24197bb86f7SLois Curfman McInnes 24297bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 24397bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 244a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 24597bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 24697bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 24797bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 24897bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 24997bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 25097bb86f7SLois Curfman McInnes #endif 25197bb86f7SLois Curfman McInnes 25297bb86f7SLois Curfman McInnes #endif 25341debaddSBarry Smith 254