1*19b02663SBarry Smith /* $Id: plog.h,v 1.10 1995/08/06 20:01:05 curfman 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 /* 1297bb86f7SLois Curfman McInnes If you add it here, make sure you add to petsc/bin/tkreview! 1397bb86f7SLois Curfman McInnes and in src/sys/src/plog.c 1497bb86f7SLois Curfman McInnes */ 1597bb86f7SLois Curfman McInnes #define MAT_Mult 0 1697bb86f7SLois Curfman McInnes #define MAT_BeginAssembly 1 1797bb86f7SLois Curfman McInnes #define MAT_EndAssembly 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 4297bb86f7SLois Curfman McInnes 4397bb86f7SLois Curfman McInnes #define VEC_Dot 30 4497bb86f7SLois Curfman McInnes #define VEC_Norm 31 4597bb86f7SLois Curfman McInnes #define VEC_ASum 32 4697bb86f7SLois Curfman McInnes #define VEC_AMax 33 4797bb86f7SLois Curfman McInnes #define VEC_Max 34 4897bb86f7SLois Curfman McInnes #define VEC_Min 35 4997bb86f7SLois Curfman McInnes #define VEC_TDot 36 5097bb86f7SLois Curfman McInnes #define VEC_Scale 37 5197bb86f7SLois Curfman McInnes #define VEC_Copy 38 5297bb86f7SLois Curfman McInnes #define VEC_Set 39 5397bb86f7SLois Curfman McInnes #define VEC_AXPY 40 5497bb86f7SLois Curfman McInnes #define VEC_AYPX 41 5597bb86f7SLois Curfman McInnes #define VEC_Swap 42 5697bb86f7SLois Curfman McInnes #define VEC_WAXPY 43 5797bb86f7SLois Curfman McInnes #define VEC_BeginAssembly 44 5897bb86f7SLois Curfman McInnes #define VEC_EndAssembly 45 5997bb86f7SLois Curfman McInnes #define VEC_MTDot 46 6097bb86f7SLois Curfman McInnes #define VEC_MDot 47 6197bb86f7SLois Curfman McInnes #define VEC_MAXPY 48 6297bb86f7SLois Curfman McInnes #define VEC_PMult 49 6397bb86f7SLois Curfman McInnes 6497bb86f7SLois Curfman McInnes #define SLES_Solve 55 6597bb86f7SLois Curfman McInnes #define PC_SetUp 56 6697bb86f7SLois Curfman McInnes #define PC_Apply 57 6797bb86f7SLois Curfman McInnes #define SLES_SetUp 58 6897bb86f7SLois Curfman McInnes 6997bb86f7SLois Curfman McInnes #define SNES_Solve 60 7097bb86f7SLois Curfman McInnes #define SNES_LineSearch 61 7197bb86f7SLois Curfman McInnes #define SNES_FunctionEval 62 7297bb86f7SLois Curfman McInnes #define SNES_JacobianEval 63 7365067f4aSLois Curfman McInnes #define SNES_MinimizationFunctionEval 64 7405c709e7SLois Curfman McInnes #define SNES_GradientEval 65 7505c709e7SLois Curfman McInnes #define SNES_HessianEval 66 7697bb86f7SLois Curfman McInnes 7797bb86f7SLois Curfman McInnes /* event numbers 70 to 89 are reserved for applications */ 7897bb86f7SLois Curfman McInnes 79*19b02663SBarry Smith /* Global flop counter */ 80*19b02663SBarry Smith extern double _TotalFlops; 81*19b02663SBarry Smith #if defined(PETSC_LOG) 82*19b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 83*19b02663SBarry Smith #else 84*19b02663SBarry Smith #define PLogFlops(n) 85*19b02663SBarry Smith #endif 86*19b02663SBarry Smith 87*19b02663SBarry Smith /*M 88*19b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 89*19b02663SBarry Smith 90*19b02663SBarry Smith Input Parameter: 91*19b02663SBarry Smith . f - flop counter 92*19b02663SBarry Smith 93*19b02663SBarry Smith Synopsis: 94*19b02663SBarry Smith PLogFlops(int f) 95*19b02663SBarry Smith 96*19b02663SBarry Smith Notes: 97*19b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 98*19b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 99*19b02663SBarry Smith application code. 100*19b02663SBarry Smith 101*19b02663SBarry Smith PETSc automatically logs library events if the code has been 102*19b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 103*19b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 104*19b02663SBarry Smith intended for logging user flops to supplement this PETSc 105*19b02663SBarry Smith information. 106*19b02663SBarry Smith 107*19b02663SBarry Smith Example of Usage: 108*19b02663SBarry Smith $ #define USER_EVENT 75 109*19b02663SBarry Smith $ PLogEventRegister(USER_EVENT,"User event"); 110*19b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 111*19b02663SBarry Smith $ [code segment to monitor] 112*19b02663SBarry Smith $ PLogFlops(user_flops) 113*19b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 114*19b02663SBarry Smith 115*19b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 116*19b02663SBarry Smith 117*19b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 118*19b02663SBarry Smith M*/ 119*19b02663SBarry Smith 120*19b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 121*19b02663SBarry Smith extern int PLogBegin(); 122*19b02663SBarry Smith extern int PLogAllBegin(); 123*19b02663SBarry Smith extern int PLogDump(char*); 124*19b02663SBarry Smith 12597bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 12697bb86f7SLois Curfman McInnes 12797bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 12897bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 12997bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 13097bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 13197bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 13297bb86f7SLois Curfman McInnes 13397bb86f7SLois Curfman McInnes /*M 134*19b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 13597bb86f7SLois Curfman McInnes 13697bb86f7SLois Curfman McInnes Input Parameters: 13797bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 13897bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 13997bb86f7SLois Curfman McInnes 14097bb86f7SLois Curfman McInnes Synopsis: 14197bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 14297bb86f7SLois Curfman McInnes PetscObject o4) 14397bb86f7SLois Curfman McInnes 14497bb86f7SLois Curfman McInnes Notes: 14597bb86f7SLois Curfman McInnes You should also register each integer event with the command 14697bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 14797bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 14897bb86f7SLois Curfman McInnes 14997bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 15097bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 15197bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 15297bb86f7SLois Curfman McInnes to supplement this PETSc information. 15397bb86f7SLois Curfman McInnes 15497bb86f7SLois Curfman McInnes Example of Usage: 15597bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 1560eb211faSLois Curfman McInnes $ int user_event_flops; 15797bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 15897bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 15997bb86f7SLois Curfman McInnes $ [code segment to monitor] 1600eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 16197bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 16297bb86f7SLois Curfman McInnes 16397bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 16497bb86f7SLois Curfman McInnes 16597bb86f7SLois Curfman McInnes .keywords: log, event, begin 16697bb86f7SLois Curfman McInnes M*/ 16797bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 16897bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 16997bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 17097bb86f7SLois Curfman McInnes 17197bb86f7SLois Curfman McInnes /*M 172*19b02663SBarry Smith PLogEventEnd - Log the end of a user event. 17397bb86f7SLois Curfman McInnes 17497bb86f7SLois Curfman McInnes Input Parameters: 17597bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 17697bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 17797bb86f7SLois Curfman McInnes 17897bb86f7SLois Curfman McInnes Synopsis: 17997bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 18097bb86f7SLois Curfman McInnes PetscObject o4) 18197bb86f7SLois Curfman McInnes 18297bb86f7SLois Curfman McInnes Notes: 18397bb86f7SLois Curfman McInnes You should also register each integer event with the command 18497bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 18597bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 18697bb86f7SLois Curfman McInnes 18797bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 18897bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 18997bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 19097bb86f7SLois Curfman McInnes to supplement this PETSc information. 19197bb86f7SLois Curfman McInnes 19297bb86f7SLois Curfman McInnes Example of Usage: 19397bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 1940eb211faSLois Curfman McInnes $ int user_event_flops; 19597bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 19697bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 19797bb86f7SLois Curfman McInnes $ [code segment to monitor] 1980eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 19997bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 20097bb86f7SLois Curfman McInnes 20197bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 20297bb86f7SLois Curfman McInnes 20397bb86f7SLois Curfman McInnes .keywords: log, event, end 20497bb86f7SLois Curfman McInnes M*/ 20597bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) \ 20697bb86f7SLois Curfman McInnes { if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,\ 20797bb86f7SLois Curfman McInnes (PetscObject)o3,(PetscObject)o4);} _tacky--;} 20897bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) {((PetscObject)(c))->parent = (PetscObject) p;} 20997bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 21097bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 21197bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 21297bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 21388cf3e7dSBarry Smith #define PLogObjectMemory(p,m) {((PetscObject)(p))->mem += (m);} 21497bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 21597bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 216c5d91301SLois Curfman McInnes extern int PLogDestroy(); 21797bb86f7SLois Curfman McInnes 21897bb86f7SLois Curfman McInnes #else 21997bb86f7SLois Curfman McInnes 22097bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 22197bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 222a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 22397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 22497bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 22597bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 22697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 22797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 22897bb86f7SLois Curfman McInnes #endif 22997bb86f7SLois Curfman McInnes 23097bb86f7SLois Curfman McInnes #endif 231