1*b8b3a08bSLois Curfman McInnes /* $Id: plog.h,v 1.32 1995/12/02 19:23:22 curfman 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 11*b8b3a08bSLois Curfman McInnes #if defined (PETSC_LOG) && defined(HAVE_BLOCKSOLVE) 12*b8b3a08bSLois Curfman McInnes #define BSMAINLOG 13*b8b3a08bSLois Curfman McInnes #endif 14*b8b3a08bSLois Curfman McInnes 1597bb86f7SLois Curfman McInnes /* 16bd3b412fSLois Curfman McInnes If you add an event here, make sure you add to petsc/bin/petscview.cfg 17bd3b412fSLois Curfman McInnes and petsc/src/sys/src/plog.c!! 1897bb86f7SLois Curfman McInnes */ 1997bb86f7SLois Curfman McInnes #define MAT_Mult 0 206f1e8a0fSLois Curfman McInnes #define MAT_AssemblyBegin 1 216f1e8a0fSLois Curfman McInnes #define MAT_AssemblyEnd 2 2297bb86f7SLois Curfman McInnes #define MAT_GetReordering 3 2397bb86f7SLois Curfman McInnes #define MAT_MultTrans 4 2497bb86f7SLois Curfman McInnes #define MAT_MultAdd 5 2597bb86f7SLois Curfman McInnes #define MAT_MultTransAdd 6 2697bb86f7SLois Curfman McInnes #define MAT_LUFactor 7 2797bb86f7SLois Curfman McInnes #define MAT_CholeskyFactor 8 2897bb86f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 9 2997bb86f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 10 3097bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 11 3197bb86f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 12 3297bb86f7SLois Curfman McInnes #define MAT_LUFactorNumeric 13 3397bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 14 3497bb86f7SLois Curfman McInnes #define MAT_Relax 15 3597bb86f7SLois Curfman McInnes #define MAT_Copy 16 3697bb86f7SLois Curfman McInnes #define MAT_Convert 17 3797bb86f7SLois Curfman McInnes #define MAT_Scale 18 3897bb86f7SLois Curfman McInnes #define MAT_ZeroEntries 19 3997bb86f7SLois Curfman McInnes #define MAT_Solve 20 4097bb86f7SLois Curfman McInnes #define MAT_SolveAdd 21 4197bb86f7SLois Curfman McInnes #define MAT_SolveTrans 22 4297bb86f7SLois Curfman McInnes #define MAT_SolveTransAdd 23 4397bb86f7SLois Curfman McInnes #define MAT_SetValues 24 44891de242SLois Curfman McInnes #define MAT_ForwardSolve 25 45891de242SLois Curfman McInnes #define MAT_BackwardSolve 26 46acac4784SBarry Smith #define MAT_Load 27 47acac4784SBarry Smith #define MAT_View 28 4802834360SBarry Smith #define MAT_ILUFactor 29 494dcbc457SBarry Smith #define MAT_GetSubMatrix 30 504dcbc457SBarry Smith #define MAT_GetSubMatrices 31 51d7524bf0SBarry Smith #define MAT_GetValues 32 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 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 854dcbc457SBarry Smith 864dcbc457SBarry Smith #define SNES_Solve 80 874dcbc457SBarry Smith #define SNES_LineSearch 81 884dcbc457SBarry Smith #define SNES_FunctionEval 82 894dcbc457SBarry Smith #define SNES_JacobianEval 83 904dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 914dcbc457SBarry Smith #define SNES_GradientEval 85 924dcbc457SBarry Smith #define SNES_HessianEval 86 934dcbc457SBarry Smith 9402834360SBarry Smith 9541debaddSBarry Smith /* 96b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 97b3b1b5bfSLois Curfman McInnes for applications. Make sure that src/sys/src/plog.c defines enough 98b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 9941debaddSBarry Smith */ 1004dcbc457SBarry Smith #define PLOG_USER_EVENT_LOW 120 1014dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 10297bb86f7SLois Curfman McInnes 10319b02663SBarry Smith /* Global flop counter */ 10419b02663SBarry Smith extern double _TotalFlops; 10519b02663SBarry Smith #if defined(PETSC_LOG) 10619b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 10719b02663SBarry Smith #else 10819b02663SBarry Smith #define PLogFlops(n) 10919b02663SBarry Smith #endif 11019b02663SBarry Smith 11119b02663SBarry Smith /*M 11219b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 11319b02663SBarry Smith 11419b02663SBarry Smith Input Parameter: 11519b02663SBarry Smith . f - flop counter 11619b02663SBarry Smith 11719b02663SBarry Smith Synopsis: 11819b02663SBarry Smith PLogFlops(int f) 11919b02663SBarry Smith 12019b02663SBarry Smith Notes: 12119b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 12219b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 12319b02663SBarry Smith application code. 12419b02663SBarry Smith 12519b02663SBarry Smith PETSc automatically logs library events if the code has been 12619b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 12719b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 12819b02663SBarry Smith intended for logging user flops to supplement this PETSc 12919b02663SBarry Smith information. 13019b02663SBarry Smith 13119b02663SBarry Smith Example of Usage: 13241debaddSBarry Smith $ #define USER_EVENT PLOG_USER_EVENT_LOW 13319b02663SBarry Smith $ PLogEventRegister(USER_EVENT,"User event"); 13419b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 13519b02663SBarry Smith $ [code segment to monitor] 13619b02663SBarry Smith $ PLogFlops(user_flops) 13719b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 13819b02663SBarry Smith 13919b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 14019b02663SBarry Smith 14119b02663SBarry Smith .keywords: Petsc, log, flops, floating point operations 14219b02663SBarry Smith M*/ 14319b02663SBarry Smith 14419b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 14519b02663SBarry Smith extern int PLogBegin(); 14619b02663SBarry Smith extern int PLogAllBegin(); 14719b02663SBarry Smith extern int PLogDump(char*); 14819b02663SBarry Smith 14997bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 15097bb86f7SLois Curfman McInnes 15197bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15297bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 15397bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 15497bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 15597bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 15697bb86f7SLois Curfman McInnes 15797bb86f7SLois Curfman McInnes /*M 15819b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 15997bb86f7SLois Curfman McInnes 16097bb86f7SLois Curfman McInnes Input Parameters: 16141debaddSBarry Smith . e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH) 16297bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 16397bb86f7SLois Curfman McInnes 16497bb86f7SLois Curfman McInnes Synopsis: 16597bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 16697bb86f7SLois Curfman McInnes PetscObject o4) 16797bb86f7SLois Curfman McInnes 16897bb86f7SLois Curfman McInnes Notes: 16997bb86f7SLois Curfman McInnes You should also register each integer event with the command 17097bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 17197bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 17297bb86f7SLois Curfman McInnes 17397bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 17497bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 17597bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 17697bb86f7SLois Curfman McInnes to supplement this PETSc information. 17797bb86f7SLois Curfman McInnes 17897bb86f7SLois Curfman McInnes Example of Usage: 17941debaddSBarry Smith $ #define USER_EVENT PLOG_USER_EVENT_LOW 1800eb211faSLois Curfman McInnes $ int user_event_flops; 18197bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 18297bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 18397bb86f7SLois Curfman McInnes $ [code segment to monitor] 1840eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 18597bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 18697bb86f7SLois Curfman McInnes 18797bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 18897bb86f7SLois Curfman McInnes 18997bb86f7SLois Curfman McInnes .keywords: log, event, begin 19097bb86f7SLois Curfman McInnes M*/ 19197bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 19297bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 19397bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 19497bb86f7SLois Curfman McInnes 19597bb86f7SLois Curfman McInnes /*M 19619b02663SBarry Smith PLogEventEnd - Log the end of a user event. 19797bb86f7SLois Curfman McInnes 19897bb86f7SLois Curfman McInnes Input Parameters: 19941debaddSBarry Smith . e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH) 20097bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 20197bb86f7SLois Curfman McInnes 20297bb86f7SLois Curfman McInnes Synopsis: 20397bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 20497bb86f7SLois Curfman McInnes PetscObject o4) 20597bb86f7SLois Curfman McInnes 20697bb86f7SLois Curfman McInnes Notes: 20797bb86f7SLois Curfman McInnes You should also register each integer event with the command 20897bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 20997bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 21097bb86f7SLois Curfman McInnes 21197bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 21297bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 21397bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 21497bb86f7SLois Curfman McInnes to supplement this PETSc information. 21597bb86f7SLois Curfman McInnes 21697bb86f7SLois Curfman McInnes Example of Usage: 21741debaddSBarry Smith $ #define USER_EVENT PLOG_EVENT_USER_LOW 2180eb211faSLois Curfman McInnes $ int user_event_flops; 21997bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 22097bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 22197bb86f7SLois Curfman McInnes $ [code segment to monitor] 2220eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 22397bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 22497bb86f7SLois Curfman McInnes 22597bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 22697bb86f7SLois Curfman McInnes 22797bb86f7SLois Curfman McInnes .keywords: log, event, end 22897bb86f7SLois Curfman McInnes M*/ 229416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\ 230416022c9SBarry Smith (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\ 231416022c9SBarry Smith _tacky--;} 232464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \ 233464493b3SBarry Smith PETSCVALIDHEADER((PetscObject)p);\ 234bfce26a3SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 23597bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 23697bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 23797bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 23897bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 2396ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m) {PETSCVALIDHEADER((PetscObject)p);\ 2406ac32965SLois Curfman McInnes ((PetscObject)(p))->mem += (m);} 24197bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 24297bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 243c5d91301SLois Curfman McInnes extern int PLogDestroy(); 244ba7af9b1SBarry Smith extern int PLogStagePush(int); 245ba7af9b1SBarry Smith extern int PLogStagePop(); 246b3b1b5bfSLois Curfman McInnes extern int PLogStageName(int,char*); 24797bb86f7SLois Curfman McInnes 24897bb86f7SLois Curfman McInnes #else 24997bb86f7SLois Curfman McInnes 25097bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 25197bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 252a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m) 25397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 25497bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 25597bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 25697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 25797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 2588b23fa05SBarry Smith extern int PLogDestroy(); 259ba7af9b1SBarry Smith extern int PLogStagePush(int); 260ba7af9b1SBarry Smith extern int PLogStagePop(); 261b3b1b5bfSLois Curfman McInnes extern int PLogStageName(int,char*); 26297bb86f7SLois Curfman McInnes #endif 26397bb86f7SLois Curfman McInnes 26497bb86f7SLois Curfman McInnes #endif 26541debaddSBarry Smith 266