Actual source code: plog.h

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

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

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

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

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

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

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

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

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

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

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

     65: /* Action and object logging variables */

     74: /* Global counters */

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

     84: #ifdef PETSC_USE_LOG

     86: /* Runtime functions */
     87: EXTERN PetscErrorCode StageLogGetClassRegLog(StageLog, ClassRegLog *);
     88: EXTERN PetscErrorCode StageLogGetEventRegLog(StageLog, EventRegLog *);
     89: EXTERN PetscErrorCode StageLogGetClassPerfLog(StageLog, int, ClassPerfLog *);
     90: EXTERN PetscErrorCode StageLogGetEventPerfLog(StageLog, int, EventPerfLog *);
     91: /* Stack Functions */
     92: EXTERN PetscErrorCode StackCreate(IntStack *);
     93: EXTERN PetscErrorCode StackDestroy(IntStack);
     94: EXTERN PetscErrorCode StackPush(IntStack, int);
     95: EXTERN PetscErrorCode StackPop(IntStack, int *);
     96: EXTERN PetscErrorCode StackTop(IntStack, int *);
     97: EXTERN PetscErrorCode StackEmpty(IntStack, PetscTruth *);

     99: /* Creation and destruction functions */
    100: EXTERN PetscErrorCode EventRegLogCreate(EventRegLog *);
    101: EXTERN PetscErrorCode EventRegLogDestroy(EventRegLog);
    102: EXTERN PetscErrorCode EventPerfLogCreate(EventPerfLog *);
    103: EXTERN PetscErrorCode EventPerfLogDestroy(EventPerfLog);
    104: /* General functions */
    105: EXTERN PetscErrorCode EventPerfLogEnsureSize(EventPerfLog, int);
    106: EXTERN PetscErrorCode EventPerfInfoClear(EventPerfInfo *);
    107: EXTERN PetscErrorCode EventPerfInfoCopy(EventPerfInfo *, EventPerfInfo *);
    108: /* Registration functions */
    109: EXTERN PetscErrorCode EventRegLogRegister(EventRegLog, const char [], PetscCookie, PetscEvent *);
    110: /* Query functions */
    111: EXTERN PetscErrorCode EventPerfLogSetVisible(EventPerfLog, PetscEvent, PetscTruth);
    112: EXTERN PetscErrorCode EventPerfLogGetVisible(EventPerfLog, PetscEvent, PetscTruth *);
    113: /* Activaton functions */
    114: EXTERN PetscErrorCode EventPerfLogActivate(EventPerfLog, PetscEvent);
    115: EXTERN PetscErrorCode EventPerfLogDeactivate(EventPerfLog, PetscEvent);
    116: EXTERN PetscErrorCode EventPerfLogActivateClass(EventPerfLog, EventRegLog, PetscCookie);
    117: EXTERN PetscErrorCode EventPerfLogDeactivateClass(EventPerfLog, EventRegLog, PetscCookie);

    119: /* Logging functions */
    120: EXTERN PetscErrorCode PetscLogEventBeginDefault(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
    121: EXTERN PetscErrorCode PetscLogEventEndDefault(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
    122: EXTERN PetscErrorCode PetscLogEventBeginComplete(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
    123: EXTERN PetscErrorCode PetscLogEventEndComplete(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
    124: EXTERN PetscErrorCode PetscLogEventBeginTrace(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
    125: EXTERN PetscErrorCode PetscLogEventEndTrace(PetscEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);

    127: /* Creation and destruction functions */
    128: EXTERN PetscErrorCode ClassRegLogCreate(ClassRegLog *);
    129: EXTERN PetscErrorCode ClassRegLogDestroy(ClassRegLog);
    130: EXTERN PetscErrorCode ClassPerfLogCreate(ClassPerfLog *);
    131: EXTERN PetscErrorCode ClassPerfLogDestroy(ClassPerfLog);
    132: EXTERN PetscErrorCode ClassRegInfoDestroy(ClassRegInfo *);
    133: /* General functions */
    134: EXTERN PetscErrorCode ClassPerfLogEnsureSize(ClassPerfLog, int);
    135: EXTERN PetscErrorCode ClassPerfInfoClear(ClassPerfInfo *);
    136: /* Registration functions */
    137: EXTERN PetscErrorCode ClassRegLogRegister(ClassRegLog, const char [], PetscCookie *);
    138: /* Query functions */
    139: EXTERN PetscErrorCode ClassRegLogGetClass(ClassRegLog, PetscCookie, int *);
    140: /* Logging functions */
    141: EXTERN PetscErrorCode PetscLogObjCreateDefault(PetscObject);
    142: EXTERN PetscErrorCode PetscLogObjDestroyDefault(PetscObject);

    144: #endif /* PETSC_USE_LOG */