Actual source code: plog.h

  1: /* $Id: plog.h,v 1.1 2000/01/10 03:28:57 knepley Exp $ */

  3: /* The class naming scheme procedes as follows:

  5:    Event:
  6:      Events are a class which describes certain blocks of executable
  7:      code. The corresponding instantiations of events are Actions.

  9:    Class:
 10:      Classes are the classes representing Petsc structures. The
 11:      corresponding instantiations are called Objects.

 13:    StageLog:
 14:      This type holds information about stages of computation. These
 15:      are understood to be chunks encompassing several events, or
 16:      alternatively, as a covering (possibly nested) of the timeline.

 18:    StageInfo:
 19:      The information about each stage. This log contains an
 20:      EventPerfLog and a ClassPerfLog.

 22:    EventRegLog:
 23:      This type holds the information generated for each event as
 24:      it is registered. This information does not change and thus is
 25:      stored separately from performance information.

 27:    EventPerfLog:
 28:      This type holds the performance information logged for each
 29:      event. Usually this information is logged for only one stage.

 31:    ClassRegLog:
 32:      This type holds the information generated for each class as
 33:      it is registered. This information does not change and thus is
 34:      stored separately from performance information.

 36:    ClassPerfLog:
 37:      This class holds information describing class/object usage during
 38:      a run. Usually this information is logged for only one stage.
 39: */

 41: /* The structure for action logging */
 42: #define CREATE      0
 43: #define DESTROY     1
 44: #define ACTIONBEGIN 2
 45: #define ACTIONEND   3
 46: typedef struct _Action {
 47:   int            action;        /* The type of execution */
 48:   int            event;         /* The event number */
 49:   int            cookie;        /* The event class id */
 50:   PetscLogDouble time;          /* The time of occurence */
 51:   PetscLogDouble flops;         /* The cumlative flops */
 52:   PetscLogDouble mem;           /* The current memory usage */
 53:   PetscLogDouble maxmem;        /* The maximum memory usage */
 54:   int            id1, id2, id3; /* The ids of associated objects */
 55: } Action;

 57: /* The structure for object logging */
 58: typedef struct _Object {
 59:   PetscObject    obj;      /* The associated PetscObject */
 60:   int            parent;   /* The parent id */
 61:   PetscLogDouble mem;      /* The memory associated with the object */
 62:   char           name[64]; /* The object name */
 63:   char           info[64]; /* The information string */
 64: } Object;

 66: /* Action and object logging variables */
 67: extern Action *actions;
 68: extern Object *objects;
 69: extern int     numActions, maxActions;
 70: extern int     numObjects, maxObjects;
 71: extern int     numObjectsDestroyed;

 73: /* Global counters */
 74: extern PetscLogDouble BaseTime;

 76: /* A simple stack */
 77: struct _IntStack {
 78:   int  top;   /* The top of the stack */
 79:   int  max;   /* The maximum stack size */
 80:   int *stack; /* The storage */
 81: };

 83: #ifdef PETSC_USE_LOG

 85: /* Creation and destruction functions */
 86: EXTERN int StageLogCreate(StageLog *);
 87: EXTERN int StageLogDestroy(StageLog);
 88: /* Registration functions */
 89: EXTERN int StageLogRegister(StageLog, const char [], int *);
 90: /* Runtime functions */
 91: EXTERN int PetscLogGetStageLog(StageLog *);
 92: EXTERN int StageLogPush(StageLog, int);
 93: EXTERN int StageLogPop(StageLog);
 94: EXTERN int StageLogGetCurrent(StageLog, int *);
 95: EXTERN int StageLogSetActive(StageLog, int, PetscTruth);
 96: EXTERN int StageLogGetActive(StageLog, int, PetscTruth *);
 97: EXTERN int StageLogSetVisible(StageLog, int, PetscTruth);
 98: EXTERN int StageLogGetVisible(StageLog, int, PetscTruth *);
 99: EXTERN int StageLogGetClassRegLog(StageLog, ClassRegLog *);
100: EXTERN int StageLogGetEventRegLog(StageLog, EventRegLog *);
101: EXTERN int StageLogGetClassPerfLog(StageLog, int, ClassPerfLog *);
102: EXTERN int StageLogGetEventPerfLog(StageLog, int, EventPerfLog *);
103: EXTERN int StageLogGetStage(StageLog, const char [], int *);
104: /* Stack Functions */
105: EXTERN int StackCreate(IntStack *);
106: EXTERN int StackDestroy(IntStack);
107: EXTERN int StackPush(IntStack, int);
108: EXTERN int StackPop(IntStack, int *);
109: EXTERN int StackTop(IntStack, int *);
110: EXTERN int StackEmpty(IntStack, PetscTruth *);

112: /* Creation and destruction functions */
113: EXTERN int EventRegLogCreate(EventRegLog *);
114: EXTERN int EventRegLogDestroy(EventRegLog);
115: EXTERN int EventPerfLogCreate(EventPerfLog *);
116: EXTERN int EventPerfLogDestroy(EventPerfLog);
117: /* General functions */
118: EXTERN int EventPerfLogEnsureSize(EventPerfLog, int);
119: EXTERN int EventPerfInfoClear(EventPerfInfo *);
120: /* Registration functions */
121: EXTERN int EventRegLogRegister(EventRegLog, const char [], int, int *);
122: /* Query functions */
123: EXTERN int EventPerfLogSetVisible(EventPerfLog, int, PetscTruth);
124: EXTERN int EventPerfLogGetVisible(EventPerfLog, int, PetscTruth *);
125: EXTERN int EventRegLogGetEvent(EventRegLog, int, int *);
126: /* Activaton functions */
127: EXTERN int EventPerfLogActivate(EventPerfLog, int);
128: EXTERN int EventPerfLogDeactivate(EventPerfLog, int);
129: EXTERN int EventPerfLogActivateClass(EventPerfLog, EventRegLog, int);
130: EXTERN int EventPerfLogDeactivateClass(EventPerfLog, EventRegLog, int);

132: /* Logging functions */
133: EXTERN int PetscLogEventBeginDefault(int, int, PetscObject, PetscObject, PetscObject, PetscObject);
134: EXTERN int PetscLogEventEndDefault(int, int, PetscObject, PetscObject, PetscObject, PetscObject);
135: EXTERN int PetscLogEventBeginComplete(int, int, PetscObject, PetscObject, PetscObject, PetscObject);
136: EXTERN int PetscLogEventEndComplete(int, int, PetscObject, PetscObject, PetscObject, PetscObject);
137: EXTERN int PetscLogEventBeginTrace(int, int, PetscObject, PetscObject, PetscObject, PetscObject);
138: EXTERN int PetscLogEventEndTrace(int, int, PetscObject, PetscObject, PetscObject, PetscObject);

140: /* Creation and destruction functions */
141: EXTERN int ClassRegLogCreate(ClassRegLog *);
142: EXTERN int ClassRegLogDestroy(ClassRegLog);
143: EXTERN int ClassPerfLogCreate(ClassPerfLog *);
144: EXTERN int ClassPerfLogDestroy(ClassPerfLog);
145: EXTERN int ClassRegInfoDestroy(ClassRegInfo *);
146: /* General functions */
147: EXTERN int ClassPerfLogEnsureSize(ClassPerfLog, int);
148: EXTERN int ClassPerfInfoClear(ClassPerfInfo *);
149: /* Registration functions */
150: EXTERN int ClassRegLogRegister(ClassRegLog, const char [], int *);
151: /* Query functions */
152: EXTERN int ClassRegLogGetClass(ClassRegLog, int, int *);
153: /* Logging functions */
154: EXTERN int PetscLogObjCreateDefault(PetscObject);
155: EXTERN int PetscLogObjDestroyDefault(PetscObject);

157: #endif /* PETSC_USE_LOG */