1*c43cb918SSatish Balay /* $Id: plog.h,v 1.48 1996/02/23 14:57:50 balay Exp balay $ */ 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 /* 12*c43cb918SSatish Balay If you add an event here, make sure you add to petsc/bin/petscview.cfg, 13*c43cb918SSatish Balay petsc/bin/petscview and petsc/src/sys/src/plog.c!! 1497bb86f7SLois Curfman McInnes */ 1597bb86f7SLois Curfman McInnes #define MAT_Mult 0 161ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult 1 171ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin 2 181ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd 3 191ff317f7SLois Curfman McInnes #define MAT_GetReordering 4 201ff317f7SLois Curfman McInnes #define MAT_MultTrans 5 211ff317f7SLois Curfman McInnes #define MAT_MultAdd 6 221ff317f7SLois Curfman McInnes #define MAT_MultTransAdd 7 231ff317f7SLois Curfman McInnes #define MAT_LUFactor 8 241ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor 9 251ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 10 261ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 11 271ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 12 281ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 13 291ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric 14 301ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 15 311ff317f7SLois Curfman McInnes #define MAT_Relax 16 321ff317f7SLois Curfman McInnes #define MAT_Copy 17 331ff317f7SLois Curfman McInnes #define MAT_Convert 18 341ff317f7SLois Curfman McInnes #define MAT_Scale 19 351ff317f7SLois Curfman McInnes #define MAT_ZeroEntries 20 361ff317f7SLois Curfman McInnes #define MAT_Solve 21 371ff317f7SLois Curfman McInnes #define MAT_SolveAdd 22 381ff317f7SLois Curfman McInnes #define MAT_SolveTrans 23 391ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd 24 401ff317f7SLois Curfman McInnes #define MAT_SetValues 25 411ff317f7SLois Curfman McInnes #define MAT_ForwardSolve 26 421ff317f7SLois Curfman McInnes #define MAT_BackwardSolve 27 431ff317f7SLois Curfman McInnes #define MAT_Load 28 441ff317f7SLois Curfman McInnes #define MAT_View 29 451ff317f7SLois Curfman McInnes #define MAT_ILUFactor 30 461ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix 31 471ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices 32 481ff317f7SLois Curfman McInnes #define MAT_GetValues 33 491ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap 34 50dd8bebb4SSatish Balay #define MAT_GetRow 35 5197bb86f7SLois Curfman McInnes 524dcbc457SBarry Smith #define VEC_Dot 40 534dcbc457SBarry Smith #define VEC_Norm 41 544dcbc457SBarry Smith #define VEC_Max 42 554dcbc457SBarry Smith #define VEC_Min 43 564dcbc457SBarry Smith #define VEC_TDot 44 574dcbc457SBarry Smith #define VEC_Scale 45 584dcbc457SBarry Smith #define VEC_Copy 46 594dcbc457SBarry Smith #define VEC_Set 47 604dcbc457SBarry Smith #define VEC_AXPY 48 614dcbc457SBarry Smith #define VEC_AYPX 49 624dcbc457SBarry Smith #define VEC_Swap 50 634dcbc457SBarry Smith #define VEC_WAXPY 51 644dcbc457SBarry Smith #define VEC_AssemblyBegin 52 654dcbc457SBarry Smith #define VEC_AssemblyEnd 53 664dcbc457SBarry Smith #define VEC_MTDot 54 674dcbc457SBarry Smith #define VEC_MDot 55 684dcbc457SBarry Smith #define VEC_MAXPY 56 694dcbc457SBarry Smith #define VEC_PMult 57 704dcbc457SBarry Smith #define VEC_SetValues 58 714dcbc457SBarry Smith #define VEC_Load 59 724dcbc457SBarry Smith #define VEC_View 60 734dcbc457SBarry Smith #define VEC_ScatterBegin 61 744dcbc457SBarry Smith #define VEC_ScatterEnd 62 75bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 7697bb86f7SLois Curfman McInnes 774dcbc457SBarry Smith #define SLES_Solve 70 784dcbc457SBarry Smith #define SLES_SetUp 71 7997bb86f7SLois Curfman McInnes 804dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 814dcbc457SBarry Smith #define KSP_Solve 73 8297bb86f7SLois Curfman McInnes 834dcbc457SBarry Smith #define PC_SetUp 75 844dcbc457SBarry Smith #define PC_Apply 76 859f0e5d82SLois Curfman McInnes #define PC_ApplySymmLeft 77 869f0e5d82SLois Curfman McInnes #define PC_ApplySymmRight 78 874dcbc457SBarry Smith 884dcbc457SBarry Smith #define SNES_Solve 80 894dcbc457SBarry Smith #define SNES_LineSearch 81 904dcbc457SBarry Smith #define SNES_FunctionEval 82 914dcbc457SBarry Smith #define SNES_JacobianEval 83 924dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 934dcbc457SBarry Smith #define SNES_GradientEval 85 944dcbc457SBarry Smith #define SNES_HessianEval 86 954dcbc457SBarry Smith 96682d7d0cSBarry Smith #define TS_Step 90 9741debaddSBarry Smith /* 98b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 99b3b1b5bfSLois Curfman McInnes for applications. Make sure that src/sys/src/plog.c defines enough 100b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 10141debaddSBarry Smith */ 10235aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1034dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 10497bb86f7SLois Curfman McInnes 10519b02663SBarry Smith /* Global flop counter */ 10619b02663SBarry Smith extern double _TotalFlops; 10719b02663SBarry Smith #if defined(PETSC_LOG) 10819b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 10919b02663SBarry Smith #else 11019b02663SBarry Smith #define PLogFlops(n) 11119b02663SBarry Smith #endif 11219b02663SBarry Smith 1136daaf66cSBarry Smith 11419b02663SBarry Smith /*M 11519b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 1166daaf66cSBarry Smith You must include "plog.h" to use this function. 11719b02663SBarry Smith 11819b02663SBarry Smith Input Parameter: 11919b02663SBarry Smith . f - flop counter 12019b02663SBarry Smith 12119b02663SBarry Smith Synopsis: 12219b02663SBarry Smith PLogFlops(int f) 12319b02663SBarry Smith 12419b02663SBarry Smith Notes: 12519b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 12619b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 12719b02663SBarry Smith application code. 12819b02663SBarry Smith 12919b02663SBarry Smith PETSc automatically logs library events if the code has been 13019b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 13119b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 13219b02663SBarry Smith intended for logging user flops to supplement this PETSc 13319b02663SBarry Smith information. 13419b02663SBarry Smith 13519b02663SBarry Smith Example of Usage: 13635aab85fSBarry Smith $ int USER_EVENT; 13735aab85fSBarry Smith $ PLogEventRegister(&USER_EVENT,"User event"); 13819b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 13919b02663SBarry Smith $ [code segment to monitor] 14019b02663SBarry Smith $ PLogFlops(user_flops) 14119b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 14219b02663SBarry Smith 14319b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 14419b02663SBarry Smith 14519b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 14619b02663SBarry Smith M*/ 14719b02663SBarry Smith 14819b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 14919b02663SBarry Smith extern int PLogBegin(); 15019b02663SBarry Smith extern int PLogAllBegin(); 15119b02663SBarry Smith extern int PLogDump(char*); 15219b02663SBarry Smith 15397bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 15497bb86f7SLois Curfman McInnes 15597bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15697bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15797bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 15897bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 15935aab85fSBarry Smith extern int PLogEventRegister(int*,char*); 16097bb86f7SLois Curfman McInnes 16197bb86f7SLois Curfman McInnes /*M 16219b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 16397bb86f7SLois Curfman McInnes 16497bb86f7SLois Curfman McInnes Input Parameters: 16535aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 16697bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 16797bb86f7SLois Curfman McInnes 16897bb86f7SLois Curfman McInnes Synopsis: 16997bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 17097bb86f7SLois Curfman McInnes PetscObject o4) 17197bb86f7SLois Curfman McInnes 17297bb86f7SLois Curfman McInnes Notes: 17397bb86f7SLois Curfman McInnes You should also register each integer event with the command 17497bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 17597bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 17697bb86f7SLois Curfman McInnes 17797bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 17897bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 17997bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 18097bb86f7SLois Curfman McInnes to supplement this PETSc information. 18197bb86f7SLois Curfman McInnes 18297bb86f7SLois Curfman McInnes Example of Usage: 18335aab85fSBarry Smith $ int USER_EVENT; 1840eb211faSLois Curfman McInnes $ int user_event_flops; 18535aab85fSBarry Smith $ PLogEventRegister(&USER_EVENT,"User event"); 18635aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 18797bb86f7SLois Curfman McInnes $ [code segment to monitor] 1880eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 18935aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 19097bb86f7SLois Curfman McInnes 19197bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 19297bb86f7SLois Curfman McInnes 19397bb86f7SLois Curfman McInnes .keywords: log, event, begin 19497bb86f7SLois Curfman McInnes M*/ 19597bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 19697bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 19797bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 19897bb86f7SLois Curfman McInnes 19997bb86f7SLois Curfman McInnes /*M 20019b02663SBarry Smith PLogEventEnd - Log the end of a user event. 20197bb86f7SLois Curfman McInnes 20297bb86f7SLois Curfman McInnes Input Parameters: 20335aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 20497bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 20597bb86f7SLois Curfman McInnes 20697bb86f7SLois Curfman McInnes Synopsis: 20797bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 20897bb86f7SLois Curfman McInnes PetscObject o4) 20997bb86f7SLois Curfman McInnes 21097bb86f7SLois Curfman McInnes Notes: 21197bb86f7SLois Curfman McInnes You should also register each integer event with the command 21297bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 21397bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 21497bb86f7SLois Curfman McInnes 21597bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 21697bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 21797bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 21897bb86f7SLois Curfman McInnes to supplement this PETSc information. 21997bb86f7SLois Curfman McInnes 22097bb86f7SLois Curfman McInnes Example of Usage: 22135aab85fSBarry Smith $ int USER_EVENT; 2220eb211faSLois Curfman McInnes $ int user_event_flops; 22335aab85fSBarry Smith $ PLogEventRegister(&USER_EVENT,"User event"); 22497bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 22597bb86f7SLois Curfman McInnes $ [code segment to monitor] 2260eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 22797bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 22897bb86f7SLois Curfman McInnes 22997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 23097bb86f7SLois Curfman McInnes 23197bb86f7SLois Curfman McInnes .keywords: log, event, end 23297bb86f7SLois Curfman McInnes M*/ 233416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\ 234416022c9SBarry Smith (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\ 235416022c9SBarry Smith _tacky--;} 236464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \ 237464493b3SBarry Smith PETSCVALIDHEADER((PetscObject)p);\ 238bfce26a3SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 23997bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 24097bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 24197bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 24297bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 2436ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m) {PETSCVALIDHEADER((PetscObject)p);\ 2446ac32965SLois Curfman McInnes ((PetscObject)(p))->mem += (m);} 24597bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 24697bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 247c5d91301SLois Curfman McInnes extern int PLogDestroy(); 248ba7af9b1SBarry Smith extern int PLogStagePush(int); 249ba7af9b1SBarry Smith extern int PLogStagePop(); 2504b0e389bSBarry Smith extern int PLogStageRegister(int,char*); 25197bb86f7SLois Curfman McInnes 25297bb86f7SLois Curfman McInnes #else 25397bb86f7SLois Curfman McInnes 25497bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 25597bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 256a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 25797bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 25897bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 25997bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 26097bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 26197bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 2628b23fa05SBarry Smith extern int PLogDestroy(); 263ba7af9b1SBarry Smith extern int PLogStagePush(int); 264ba7af9b1SBarry Smith extern int PLogStagePop(); 2654b0e389bSBarry Smith extern int PLogStageRegister(int,char*); 26697bb86f7SLois Curfman McInnes #endif 26797bb86f7SLois Curfman McInnes 26897bb86f7SLois Curfman McInnes #endif 26941debaddSBarry Smith 270