1*bd3b412fSLois Curfman McInnes /* $Id: plog.h,v 1.25 1995/11/01 19:12:32 bsmith Exp curfman $ */ 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 /* 12*bd3b412fSLois Curfman McInnes If you add an event here, make sure you add to petsc/bin/petscview.cfg 13*bd3b412fSLois 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 4597bb86f7SLois Curfman McInnes 4697bb86f7SLois Curfman McInnes #define VEC_Dot 30 4797bb86f7SLois Curfman McInnes #define VEC_Norm 31 4897bb86f7SLois Curfman McInnes #define VEC_Max 34 4997bb86f7SLois Curfman McInnes #define VEC_Min 35 5097bb86f7SLois Curfman McInnes #define VEC_TDot 36 5197bb86f7SLois Curfman McInnes #define VEC_Scale 37 5297bb86f7SLois Curfman McInnes #define VEC_Copy 38 5397bb86f7SLois Curfman McInnes #define VEC_Set 39 5497bb86f7SLois Curfman McInnes #define VEC_AXPY 40 5597bb86f7SLois Curfman McInnes #define VEC_AYPX 41 5697bb86f7SLois Curfman McInnes #define VEC_Swap 42 5797bb86f7SLois Curfman McInnes #define VEC_WAXPY 43 586f1e8a0fSLois Curfman McInnes #define VEC_AssemblyBegin 44 596f1e8a0fSLois Curfman McInnes #define VEC_AssemblyEnd 45 6097bb86f7SLois Curfman McInnes #define VEC_MTDot 46 6197bb86f7SLois Curfman McInnes #define VEC_MDot 47 6297bb86f7SLois Curfman McInnes #define VEC_MAXPY 48 6397bb86f7SLois Curfman McInnes #define VEC_PMult 49 6463723609SBarry Smith #define VEC_SetValues 50 65acac4784SBarry Smith #define VEC_Load 51 66acac4784SBarry Smith #define VEC_View 52 6797bb86f7SLois Curfman McInnes 6897bb86f7SLois Curfman McInnes #define SLES_Solve 55 6997bb86f7SLois Curfman McInnes #define PC_SetUp 56 7097bb86f7SLois Curfman McInnes #define PC_Apply 57 7197bb86f7SLois Curfman McInnes #define SLES_SetUp 58 7297bb86f7SLois Curfman McInnes 7397bb86f7SLois Curfman McInnes #define SNES_Solve 60 7497bb86f7SLois Curfman McInnes #define SNES_LineSearch 61 7597bb86f7SLois Curfman McInnes #define SNES_FunctionEval 62 7697bb86f7SLois Curfman McInnes #define SNES_JacobianEval 63 7765067f4aSLois Curfman McInnes #define SNES_MinimizationFunctionEval 64 7805c709e7SLois Curfman McInnes #define SNES_GradientEval 65 7905c709e7SLois Curfman McInnes #define SNES_HessianEval 66 8097bb86f7SLois Curfman McInnes 8102834360SBarry Smith #define MAT_GetSubMatrix 70 821987afe7SBarry Smith #define KSP_GMRESOrthogonalization 71 83*bd3b412fSLois Curfman McInnes #define KSP_Solve 72 84*bd3b412fSLois Curfman McInnes #define MAT_GetSubMatrices 73 85*bd3b412fSLois Curfman McInnes #define VEC_ScatterBegin 74 86*bd3b412fSLois Curfman McInnes #define VEC_ScatterEnd 75 8702834360SBarry Smith 8802834360SBarry Smith /* event numbers 80 to 99 are reserved for applications */ 8997bb86f7SLois Curfman McInnes 9019b02663SBarry Smith /* Global flop counter */ 9119b02663SBarry Smith extern double _TotalFlops; 9219b02663SBarry Smith #if defined(PETSC_LOG) 9319b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 9419b02663SBarry Smith #else 9519b02663SBarry Smith #define PLogFlops(n) 9619b02663SBarry Smith #endif 9719b02663SBarry Smith 9819b02663SBarry Smith /*M 9919b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 10019b02663SBarry Smith 10119b02663SBarry Smith Input Parameter: 10219b02663SBarry Smith . f - flop counter 10319b02663SBarry Smith 10419b02663SBarry Smith Synopsis: 10519b02663SBarry Smith PLogFlops(int f) 10619b02663SBarry Smith 10719b02663SBarry Smith Notes: 10819b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 10919b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 11019b02663SBarry Smith application code. 11119b02663SBarry Smith 11219b02663SBarry Smith PETSc automatically logs library events if the code has been 11319b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 11419b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 11519b02663SBarry Smith intended for logging user flops to supplement this PETSc 11619b02663SBarry Smith information. 11719b02663SBarry Smith 11819b02663SBarry Smith Example of Usage: 119a75bc0e7SLois Curfman McInnes $ #define USER_EVENT 85 12019b02663SBarry Smith $ PLogEventRegister(USER_EVENT,"User event"); 12119b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 12219b02663SBarry Smith $ [code segment to monitor] 12319b02663SBarry Smith $ PLogFlops(user_flops) 12419b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 12519b02663SBarry Smith 12619b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 12719b02663SBarry Smith 12819b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 12919b02663SBarry Smith M*/ 13019b02663SBarry Smith 13119b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 13219b02663SBarry Smith extern int PLogBegin(); 13319b02663SBarry Smith extern int PLogAllBegin(); 13419b02663SBarry Smith extern int PLogDump(char*); 13519b02663SBarry Smith 13697bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 13797bb86f7SLois Curfman McInnes 13897bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 13997bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 14097bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 14197bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 14297bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 14397bb86f7SLois Curfman McInnes 14497bb86f7SLois Curfman McInnes /*M 14519b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 14697bb86f7SLois Curfman McInnes 14797bb86f7SLois Curfman McInnes Input Parameters: 148a75bc0e7SLois Curfman McInnes . e - integer associated with the event (80 < e < 99) 14997bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 15097bb86f7SLois Curfman McInnes 15197bb86f7SLois Curfman McInnes Synopsis: 15297bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 15397bb86f7SLois Curfman McInnes PetscObject o4) 15497bb86f7SLois Curfman McInnes 15597bb86f7SLois Curfman McInnes Notes: 15697bb86f7SLois Curfman McInnes You should also register each integer event with the command 15797bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 15897bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 15997bb86f7SLois Curfman McInnes 16097bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 16197bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 16297bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 16397bb86f7SLois Curfman McInnes to supplement this PETSc information. 16497bb86f7SLois Curfman McInnes 16597bb86f7SLois Curfman McInnes Example of Usage: 166ddd12767SBarry Smith $ #define USER_EVENT 85 1670eb211faSLois Curfman McInnes $ int user_event_flops; 16897bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 16997bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 17097bb86f7SLois Curfman McInnes $ [code segment to monitor] 1710eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 17297bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 17397bb86f7SLois Curfman McInnes 17497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 17597bb86f7SLois Curfman McInnes 17697bb86f7SLois Curfman McInnes .keywords: log, event, begin 17797bb86f7SLois Curfman McInnes M*/ 17897bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 17997bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 18097bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 18197bb86f7SLois Curfman McInnes 18297bb86f7SLois Curfman McInnes /*M 18319b02663SBarry Smith PLogEventEnd - Log the end of a user event. 18497bb86f7SLois Curfman McInnes 18597bb86f7SLois Curfman McInnes Input Parameters: 186a75bc0e7SLois Curfman McInnes . e - integer associated with the event (80 < e < 99) 18797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 18897bb86f7SLois Curfman McInnes 18997bb86f7SLois Curfman McInnes Synopsis: 19097bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 19197bb86f7SLois Curfman McInnes PetscObject o4) 19297bb86f7SLois Curfman McInnes 19397bb86f7SLois Curfman McInnes Notes: 19497bb86f7SLois Curfman McInnes You should also register each integer event with the command 19597bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 19697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 19797bb86f7SLois Curfman McInnes 19897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 19997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 20097bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 20197bb86f7SLois Curfman McInnes to supplement this PETSc information. 20297bb86f7SLois Curfman McInnes 20397bb86f7SLois Curfman McInnes Example of Usage: 204a75bc0e7SLois Curfman McInnes $ #define USER_EVENT 85 2050eb211faSLois Curfman McInnes $ int user_event_flops; 20697bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 20797bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 20897bb86f7SLois Curfman McInnes $ [code segment to monitor] 2090eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 21097bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 21197bb86f7SLois Curfman McInnes 21297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 21397bb86f7SLois Curfman McInnes 21497bb86f7SLois Curfman McInnes .keywords: log, event, end 21597bb86f7SLois Curfman McInnes M*/ 216416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\ 217416022c9SBarry Smith (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\ 218416022c9SBarry Smith _tacky--;} 219464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \ 220464493b3SBarry Smith PETSCVALIDHEADER((PetscObject)p);\ 221bfce26a3SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 22297bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 22397bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 22497bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 22597bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 2266ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m) {PETSCVALIDHEADER((PetscObject)p);\ 2276ac32965SLois Curfman McInnes ((PetscObject)(p))->mem += (m);} 22897bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 22997bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 230c5d91301SLois Curfman McInnes extern int PLogDestroy(); 23197bb86f7SLois Curfman McInnes 23297bb86f7SLois Curfman McInnes #else 23397bb86f7SLois Curfman McInnes 23497bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 23597bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 236a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 23797bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 23897bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 23997bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 24097bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 24197bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 24297bb86f7SLois Curfman McInnes #endif 24397bb86f7SLois Curfman McInnes 24497bb86f7SLois Curfman McInnes #endif 245