|
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 */
|