Blame src/include/rlog.h

Packit Service c5cf8c
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit Service c5cf8c
/*
Packit Service c5cf8c
 *  (C) 2001 by Argonne National Laboratory.
Packit Service c5cf8c
 *      See COPYRIGHT in top-level directory.
Packit Service c5cf8c
 */
Packit Service c5cf8c
Packit Service c5cf8c
#ifndef RLOG_H_INCLUDED
Packit Service c5cf8c
#define RLOG_H_INCLUDED
Packit Service c5cf8c
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
Packit Service c5cf8c
#if defined(__cplusplus)
Packit Service c5cf8c
extern "C" {
Packit Service c5cf8c
#endif
Packit Service c5cf8c
Packit Service c5cf8c
/* definitions */
Packit Service c5cf8c
#ifndef RLOG_BOOL
Packit Service c5cf8c
#define RLOG_BOOL int
Packit Service c5cf8c
#endif
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_BUFFSIZE           (8*1024*1024)
Packit Service c5cf8c
#define RLOG_MAX_RECORD_SIZE     1024
Packit Service c5cf8c
#define RLOG_COLOR_LENGTH       (3 * sizeof(double))
Packit Service c5cf8c
#define RLOG_DESCRIPTION_LENGTH (5 * sizeof(double))
Packit Service c5cf8c
#define RLOG_MAX_DOUBLE         (1e100)
Packit Service c5cf8c
#define RLOG_MIN_DOUBLE         (-1e100)
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_SENDER   1
Packit Service c5cf8c
#define RLOG_RECEIVER 0
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_FIRST_EVENT_ID 1500
Packit Service c5cf8c
#define RLOG_ARROW_EVENT_ID 1499
Packit Service c5cf8c
Packit Service c5cf8c
/* structures */
Packit Service c5cf8c
Packit Service c5cf8c
    typedef enum RLOG_RECORD_TYPE {
Packit Service c5cf8c
        RLOG_INVALID_TYPE = 0,
Packit Service c5cf8c
        RLOG_ENDLOG_TYPE,
Packit Service c5cf8c
        RLOG_EVENT_TYPE,
Packit Service c5cf8c
        RLOG_ARROW_TYPE,
Packit Service c5cf8c
        RLOG_IARROW_TYPE,
Packit Service c5cf8c
        RLOG_STATE_TYPE,
Packit Service c5cf8c
        RLOG_COMM_TYPE
Packit Service c5cf8c
    } RLOG_RECORD_TYPE;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_HEADER {
Packit Service c5cf8c
        RLOG_RECORD_TYPE type;
Packit Service c5cf8c
        int length;
Packit Service c5cf8c
    } RLOG_HEADER;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_STATE {
Packit Service c5cf8c
        int event;
Packit Service c5cf8c
        int pad;
Packit Service c5cf8c
        char color[RLOG_COLOR_LENGTH];
Packit Service c5cf8c
        char description[RLOG_DESCRIPTION_LENGTH];
Packit Service c5cf8c
    } RLOG_STATE;
Packit Service c5cf8c
Packit Service c5cf8c
/* FIXME: RLOG should use the generic (and lighter weight) timestamp type,
Packit Service c5cf8c
   not a double, for recording the timestamp bits.  This is an unnecessary
Packit Service c5cf8c
   extra overhead that makes RLOG less appropriate for fine-grain logging */
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_EVENT {
Packit Service c5cf8c
        int rank;
Packit Service c5cf8c
        int event;
Packit Service c5cf8c
        int pad;
Packit Service c5cf8c
        int recursion;
Packit Service c5cf8c
        double start_time;
Packit Service c5cf8c
        double end_time;
Packit Service c5cf8c
    } RLOG_EVENT;
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_ARROW_LEFT  1
Packit Service c5cf8c
#define RLOG_ARROW_RIGHT 0
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_ARROW {
Packit Service c5cf8c
        int src;
Packit Service c5cf8c
        int dest;
Packit Service c5cf8c
        int tag;
Packit Service c5cf8c
        int length;
Packit Service c5cf8c
        int leftright;
Packit Service c5cf8c
        int pad;
Packit Service c5cf8c
        double start_time;
Packit Service c5cf8c
        double end_time;
Packit Service c5cf8c
    } RLOG_ARROW;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_IARROW {
Packit Service c5cf8c
        int sendrecv;
Packit Service c5cf8c
        int rank;
Packit Service c5cf8c
        int remote;
Packit Service c5cf8c
        int tag;
Packit Service c5cf8c
        int length;
Packit Service c5cf8c
        int pad;
Packit Service c5cf8c
        double timestamp;
Packit Service c5cf8c
    } RLOG_IARROW;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_COMM {
Packit Service c5cf8c
        int newcomm;
Packit Service c5cf8c
        int rank;
Packit Service c5cf8c
    } RLOG_COMM;
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_HEADER_SECTION         0
Packit Service c5cf8c
#define RLOG_STATE_SECTION          1
Packit Service c5cf8c
#define RLOG_ARROW_SECTION          2
Packit Service c5cf8c
#define RLOG_EVENT_SECTION          3
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_FILE_HEADER {
Packit Service c5cf8c
        int nMinRank, nMaxRank;
Packit Service c5cf8c
    } RLOG_FILE_HEADER;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct IRLOG_IOStruct {
Packit Service c5cf8c
        FILE *f;
Packit Service c5cf8c
        RLOG_HEADER header;
Packit Service c5cf8c
        union RLOG_DATA {
Packit Service c5cf8c
            RLOG_STATE state;
Packit Service c5cf8c
            RLOG_EVENT event;
Packit Service c5cf8c
            RLOG_IARROW iarrow;
Packit Service c5cf8c
            RLOG_COMM comm;
Packit Service c5cf8c
        } record;
Packit Service c5cf8c
        char *pCurHeader;
Packit Service c5cf8c
        char *pNextHeader;
Packit Service c5cf8c
        char *pEnd;
Packit Service c5cf8c
        char buffer[RLOG_BUFFSIZE];
Packit Service c5cf8c
    } IRLOG_IOStruct;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_IOStruct {
Packit Service c5cf8c
        FILE *f;
Packit Service c5cf8c
        RLOG_FILE_HEADER header;
Packit Service c5cf8c
        int nNumStates, nCurState;
Packit Service c5cf8c
        long nStateOffset;
Packit Service c5cf8c
        int nNumArrows, nCurArrow;
Packit Service c5cf8c
        long nArrowOffset;
Packit Service c5cf8c
        int nNumRanks;
Packit Service c5cf8c
        int *pRank;
Packit Service c5cf8c
        int *pNumEventRecursions;
Packit Service c5cf8c
        int **ppNumEvents, **ppCurEvent;
Packit Service c5cf8c
        int **ppCurGlobalEvent;
Packit Service c5cf8c
        RLOG_EVENT **gppCurEvent, **gppPrevEvent, gCurEvent;
Packit Service c5cf8c
        int gnCurRank, gnCurLevel, gnCurEvent;
Packit Service c5cf8c
        long **ppEventOffset;
Packit Service c5cf8c
    } RLOG_IOStruct;
Packit Service c5cf8c
Packit Service c5cf8c
    typedef struct RLOG_Struct {
Packit Service c5cf8c
        int bLogging;
Packit Service c5cf8c
        int nCurEventId;
Packit Service c5cf8c
        char pszFileName[256];
Packit Service c5cf8c
        int nRank;
Packit Service c5cf8c
        int nSize;
Packit Service c5cf8c
        int nRecursion;
Packit Service c5cf8c
        double dFirstTimestamp;
Packit Service c5cf8c
        RLOG_HEADER DiskHeader;
Packit Service c5cf8c
        RLOG_EVENT DiskEvent;
Packit Service c5cf8c
Packit Service c5cf8c
        IRLOG_IOStruct *pOutput;
Packit Service c5cf8c
    } RLOG_Struct;
Packit Service c5cf8c
Packit Service c5cf8c
/* function prototypes */
Packit Service c5cf8c
Packit Service c5cf8c
/* logging functions */
Packit Service c5cf8c
    RLOG_Struct *RLOG_InitLog(int rank, int size);
Packit Service c5cf8c
    int RLOG_FinishLog(RLOG_Struct * pRLOG);
Packit Service c5cf8c
/*void RLOG_LogEvent(RLOG_Struct *pRLOG, int event, double starttime, double endtime, int recursion);*/
Packit Service c5cf8c
    void RLOG_LogSend(RLOG_Struct * pRLOG, int dest, int tag, int size);
Packit Service c5cf8c
    void RLOG_LogRecv(RLOG_Struct * pRLOG, int src, int tag, int size);
Packit Service c5cf8c
    void RLOG_LogCommID(RLOG_Struct * pRLOG, int id);
Packit Service c5cf8c
    void RLOG_DescribeState(RLOG_Struct * pRLOG, int state, char *name, char *color);
Packit Service c5cf8c
    void RLOG_EnableLogging(RLOG_Struct * pRLOG);
Packit Service c5cf8c
    void RLOG_DisableLogging(RLOG_Struct * pRLOG);
Packit Service c5cf8c
    int RLOG_GetNextEventID(RLOG_Struct * pRLOG);
Packit Service c5cf8c
    void RLOG_SaveFirstTimestamp(RLOG_Struct * pRLOG);
Packit Service c5cf8c
Packit Service c5cf8c
/* irlog utility functions */
Packit Service c5cf8c
    IRLOG_IOStruct *IRLOG_CreateInputStruct(const char *filename);
Packit Service c5cf8c
    IRLOG_IOStruct *IRLOG_CreateOutputStruct(const char *filename);
Packit Service c5cf8c
    int IRLOG_GetNextRecord(IRLOG_IOStruct * pInput);
Packit Service c5cf8c
    int IRLOG_WriteRecord(RLOG_HEADER * pRecord, IRLOG_IOStruct * pOutput);
Packit Service c5cf8c
    int IRLOG_CloseInputStruct(IRLOG_IOStruct ** ppInput);
Packit Service c5cf8c
    int IRLOG_CloseOutputStruct(IRLOG_IOStruct ** ppOutput);
Packit Service c5cf8c
Packit Service c5cf8c
/* rlog utility functions */
Packit Service c5cf8c
    RLOG_IOStruct *RLOG_CreateInputStruct(const char *filename);
Packit Service c5cf8c
    int RLOG_CloseInputStruct(RLOG_IOStruct ** ppInput);
Packit Service c5cf8c
    int RLOG_GetFileHeader(RLOG_IOStruct * pInput, RLOG_FILE_HEADER * pHeader);
Packit Service c5cf8c
    int RLOG_GetNumStates(RLOG_IOStruct * pInput);
Packit Service c5cf8c
    int RLOG_GetState(RLOG_IOStruct * pInput, int i, RLOG_STATE * pState);
Packit Service c5cf8c
    int RLOG_ResetStateIter(RLOG_IOStruct * pInput);
Packit Service c5cf8c
    int RLOG_GetNextState(RLOG_IOStruct * pInput, RLOG_STATE * pState);
Packit Service c5cf8c
    int RLOG_GetNumArrows(RLOG_IOStruct * pInput);
Packit Service c5cf8c
    int RLOG_GetArrow(RLOG_IOStruct * pInput, int i, RLOG_ARROW * pArrow);
Packit Service c5cf8c
    int RLOG_ResetArrowIter(RLOG_IOStruct * pInput);
Packit Service c5cf8c
    int RLOG_GetNextArrow(RLOG_IOStruct * pInput, RLOG_ARROW * pArrow);
Packit Service c5cf8c
    int RLOG_GetRankRange(RLOG_IOStruct * pInput, int *pMin, int *pMax);
Packit Service c5cf8c
    int RLOG_GetNumEventRecursions(RLOG_IOStruct * pInput, int rank);
Packit Service c5cf8c
    int RLOG_GetNumEvents(RLOG_IOStruct * pInput, int rank, int recursion_level);
Packit Service c5cf8c
    int RLOG_GetEvent(RLOG_IOStruct * pInput, int rank, int recursion_level, int index,
Packit Service c5cf8c
                      RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_ResetEventIter(RLOG_IOStruct * pInput, int rank, int recursion_level);
Packit Service c5cf8c
    int RLOG_GetNextEvent(RLOG_IOStruct * pInput, int rank, int recursion_level,
Packit Service c5cf8c
                          RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_FindEventBeforeTimestamp(RLOG_IOStruct * pInput, int rank, int recursion_level,
Packit Service c5cf8c
                                      double timestamp, RLOG_EVENT * pEvent, int *pIndex);
Packit Service c5cf8c
    int RLOG_FindAnyEventBeforeTimestamp(RLOG_IOStruct * pInput, int rank, double timestamp,
Packit Service c5cf8c
                                         RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_ResetGlobalIter(RLOG_IOStruct * pInput);
Packit Service c5cf8c
    int RLOG_GetNextGlobalEvent(RLOG_IOStruct * pInput, RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_GetPreviousGlobalEvent(RLOG_IOStruct * pInput, RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_GetCurrentGlobalEvent(RLOG_IOStruct * pInput, RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_FindGlobalEventBeforeTimestamp(RLOG_IOStruct * pInput, double timestamp,
Packit Service c5cf8c
                                            RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_FindArrowBeforeTimestamp(RLOG_IOStruct * pInput, double timestamp, RLOG_ARROW * pArrow,
Packit Service c5cf8c
                                      int *pIndex);
Packit Service c5cf8c
    int RLOG_HitTest(RLOG_IOStruct * pInput, int rank, int level, double timestamp,
Packit Service c5cf8c
                     RLOG_EVENT * pEvent);
Packit Service c5cf8c
    int RLOG_ModifyEvents(const char *log_filename, double *pOffsets, int num_offsets);
Packit Service c5cf8c
Packit Service c5cf8c
/* debugging functions */
Packit Service c5cf8c
    int RLOG_PrintGlobalState(RLOG_IOStruct * pInput);
Packit Service c5cf8c
Packit Service c5cf8c
/* macros */
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_HEADER_CAST() ((RLOG_HEADER*)pRLOG->pOutput->pCurHeader)
Packit Service c5cf8c
#define RLOG_EVENT_CAST()  ((RLOG_EVENT*)((char*)pRLOG->pOutput->pCurHeader + sizeof(RLOG_HEADER)))
Packit Service c5cf8c
Packit Service c5cf8c
#define RLOG_LogEvent(pRLOG, event_param, starttime, endtime, recursion_param) \
Packit Service c5cf8c
    if (pRLOG->bLogging)                                                \
Packit Service c5cf8c
    {                                                                   \
Packit Service c5cf8c
        if (pRLOG->pOutput->pCurHeader + sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT) > pRLOG->pOutput->pEnd) \
Packit Service c5cf8c
        {                                                               \
Packit Service c5cf8c
            WriteCurrentDataAndLogEvent(pRLOG, event_param, starttime, endtime, recursion_param); \
Packit Service c5cf8c
        }                                                               \
Packit Service c5cf8c
        else                                                            \
Packit Service c5cf8c
        {                                                               \
Packit Service c5cf8c
            RLOG_HEADER_CAST()->type = RLOG_EVENT_TYPE;                 \
Packit Service c5cf8c
            RLOG_HEADER_CAST()->length = sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT); \
Packit Service c5cf8c
            RLOG_EVENT_CAST()->rank = pRLOG->nRank;                     \
Packit Service c5cf8c
            RLOG_EVENT_CAST()->end_time = endtime - pRLOG->dFirstTimestamp; \
Packit Service c5cf8c
            RLOG_EVENT_CAST()->start_time = starttime - pRLOG->dFirstTimestamp; \
Packit Service c5cf8c
            RLOG_EVENT_CAST()->event = event_param;                     \
Packit Service c5cf8c
            RLOG_EVENT_CAST()->recursion = recursion_param;             \
Packit Service c5cf8c
            /* advance the current position pointer */                  \
Packit Service c5cf8c
            pRLOG->pOutput->pCurHeader += sizeof(RLOG_HEADER) + sizeof(RLOG_EVENT); \
Packit Service c5cf8c
        }                                                               \
Packit Service c5cf8c
    }
Packit Service c5cf8c
Packit Service c5cf8c
    void WriteCurrentDataAndLogEvent(RLOG_Struct * pRLOG, int event, double starttime,
Packit Service c5cf8c
                                     double endtime, int recursion);
Packit Service c5cf8c
Packit Service c5cf8c
#if defined(__cplusplus)
Packit Service c5cf8c
}
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#endif                          /* RLOG_H_INCLUDED */