⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trace_input.c

📁 刚才是说明 现在是安装程序在 LINUX环境下进行编程的MPICH安装文件
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//*  $Id: trace_input.c,v 1.4 2002/09/27 21:11:15 toonen Exp $ * *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. *//* TraceInput.cpp : Defines the entry point for the DLL application. */#include "trace_input.h"#include "rlog.h"#include <stdlib.h>#include <ctype.h>#include <string.h>#define TRACEINPUT_SUCCESS 0#define TRACEINPUT_FAIL    -1#define INVALID_EVENT -1typedef struct _trace_file{    RLOG_IOStruct *pInput;    RLOG_STATE state;    RLOG_ARROW arrow;    BOOL bArrowAvail;    RLOG_EVENT **ppEvent;    BOOL **ppEventAvail;} _trace_file;BOOL PackQuadChar(char *str, int *length, char *base, int *pos, const int max){    /* Am I supposed to include the terminating NULL character? */    /* This function does not. */    if (*pos + (int)strlen(str) > max)	return FALSE;    *length = strlen(str);    memcpy(&base[*pos], str, *length);    *pos += *length;    return TRUE;}BOOL PackQuadInt(int n1, int n2, int *length, int *base, int *pos, const int max){    if (*pos + 2 > max)	return FALSE;    *length = 2;    base[*pos] = n1;    base[*pos+1] = n2;    *pos += 2;    return TRUE;}BOOL PackQuadDouble(double d1, double d2, int *length, double *base, int *pos, const int max){    if (*pos + 2 > max)	return FALSE;    *length = 2;    base[*pos] = d1;    base[*pos+1] = d2;    *pos += 2;    return TRUE;}TRACE_EXPORT int TRACE_Open( const char filespec[], TRACE_file *fp ){    int i, j;    RLOG_IOStruct *pInput;    if (filespec == NULL || fp == NULL)	return TRACEINPUT_FAIL;    if (strstr(filespec, "-h"))    {	*fp = NULL;	return TRACEINPUT_SUCCESS;    }    *fp = (_trace_file*)malloc(sizeof(_trace_file));    if (*fp == NULL)	return TRACEINPUT_FAIL;    (*fp)->pInput = pInput = RLOG_CreateInputStruct(filespec);    if (pInput == NULL)    {	free(*fp);	*fp = NULL;	return TRACEINPUT_FAIL;    }    (*fp)->bArrowAvail = (RLOG_GetNextArrow(pInput, &(*fp)->arrow) == 0);    if (pInput->nNumRanks > 0)    {	(*fp)->ppEvent = (RLOG_EVENT**)malloc(sizeof(RLOG_EVENT*) * pInput->nNumRanks);	(*fp)->ppEventAvail = (int**)malloc(sizeof(int*) * pInput->nNumRanks);	for (i=0; i<pInput->nNumRanks; i++)	{	    if (pInput->pNumEventRecursions[i] > 0)	    {		(*fp)->ppEvent[i] = (RLOG_EVENT*)malloc(sizeof(RLOG_EVENT) * pInput->pNumEventRecursions[i]);		(*fp)->ppEventAvail[i] = (int*)malloc(sizeof(int) * pInput->pNumEventRecursions[i]);	    }	    else	    {		(*fp)->ppEvent[i] = NULL;		(*fp)->ppEventAvail[i] = NULL;	    }	}    }    else    {	(*fp)->ppEvent = NULL;	(*fp)->ppEventAvail = NULL;    }    for (j=0; j<pInput->nNumRanks; j++)    {	for (i=0; i<pInput->pNumEventRecursions[j]; i++)	{	    (*fp)->ppEventAvail[j][i] = (RLOG_GetNextEvent(pInput, j+pInput->header.nMinRank, i, &(*fp)->ppEvent[j][i]) == 0);	}    }    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Close( TRACE_file *fp ){    int i;    if (*fp == NULL)	return TRACEINPUT_SUCCESS;    if ((*fp)->pInput)    {	for (i=0; i<(*fp)->pInput->nNumRanks; i++)	{	    if ( (*fp)->ppEvent[i] )		free( (*fp)->ppEvent[i] );	    if ( (*fp)->ppEventAvail[i] )		free( (*fp)->ppEventAvail[i] );	}	RLOG_CloseInputStruct(&(*fp)->pInput);    }    if ((*fp)->ppEvent)	free( (*fp)->ppEvent );    if ((*fp)->ppEventAvail)	free( (*fp)->ppEventAvail );    free( (*fp) );    *fp = NULL;    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Peek_next_kind( const TRACE_file fp, TRACE_Rec_Kind_t *next_kind ){    int i,j;    *next_kind = TRACE_EOF;    if (fp->pInput->nCurState < fp->pInput->nNumStates)    {	*next_kind = TRACE_CATEGORY;	return TRACEINPUT_SUCCESS;    }    for (j=0; j<fp->pInput->nNumRanks; j++)    {	for (i=0; i<fp->pInput->pNumEventRecursions[j]; i++)	{	    if (fp->ppEventAvail[j][i])	    {		*next_kind = TRACE_PRIMITIVE_DRAWABLE;		return TRACEINPUT_SUCCESS;	    }	}    }	    if (fp->bArrowAvail)    {	*next_kind = TRACE_PRIMITIVE_DRAWABLE;	return TRACEINPUT_SUCCESS;    }    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Get_next_method( const TRACE_file fp,                           char method_name[], char method_extra[],                            int *methodID ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Peek_next_category( const TRACE_file fp,                              int *n_legend, int *n_label,                              int *n_methodIDs ){    if (fp->pInput->nCurState >= fp->pInput->nNumStates)	return TRACEINPUT_FAIL;    if (RLOG_GetNextState(fp->pInput, &fp->state) != 0)	return TRACEINPUT_FAIL;    *n_legend = strlen(fp->state.description)+1;    *n_label = 0;    *n_methodIDs = 0;    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Get_next_category( const TRACE_file fp,                              TRACE_Category_head_t *head,                             int *n_legend, char *legend_base,                             int *legend_pos, const int legend_max,                             int *n_label, char *label_base,                             int *label_pos, const int label_max,                             int *n_methodIDs, int *methodID_base,                             int *methodID_pos, const int methodID_max ){    char *pColorStr = fp->state.color;    head->index = fp->state.event;    while (isspace(*pColorStr))	pColorStr++;    head->red = atoi(pColorStr);    while (!isspace(*pColorStr))	pColorStr++;    while (isspace(*pColorStr))	pColorStr++;    head->green = atoi(pColorStr);    while (!isspace(*pColorStr))	pColorStr++;    while (isspace(*pColorStr))	pColorStr++;    head->blue = atoi(pColorStr);    head->alpha = 255;    if (fp->state.event == RLOG_ARROW_EVENT_ID)	head->shape = TRACE_SHAPE_ARROW;    else	head->shape = TRACE_SHAPE_STATE;    head->width = 1;    if (!PackQuadChar(fp->state.description, n_legend, legend_base, legend_pos, legend_max))	return TRACEINPUT_FAIL;    *n_label = 0;    *n_methodIDs = 0;    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Peek_next_ycoordmap( TRACE_file fp,                               int *n_rows, int *n_columns,                               int *max_column_name,                               int *max_title_name,                               int *n_methodIDs ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Get_next_ycoordmap( TRACE_file fp,                              char *title_name,                              char **column_names,                              int *coordmap_sz, int *coordmap_base,                              int *coordmap_pos, const int coordmap_max,                              int *n_methodIDs, int *methodID_base,                              int *methodID_pos, const int methodID_max ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Peek_next_primitive( const TRACE_file fp,                               double *starttime, double *endtime,                               int *n_tcoords, int *n_ycoords, int *n_bytes ){    int i, j, rank = -1, level = -1;    double dmin;    BOOL done = FALSE;    *n_tcoords = 2;    *n_ycoords = 2;    *n_bytes = 0;    for (j=0; j<fp->pInput->nNumRanks && !done; j++)    {	for (i=0; i<fp->pInput->pNumEventRecursions[j] && !done; i++)	{	    if (fp->ppEventAvail[j][i])	    {		level = i;		rank  = j;		dmin = fp->ppEvent[j][i].end_time;		done = TRUE;	    }	}    }    if (level == -1)    {	if (!fp->bArrowAvail)	    return TRACEINPUT_FAIL;	*starttime = fp->arrow.start_time;	*endtime = fp->arrow.end_time;	return TRACEINPUT_SUCCESS;    }    for (j=0; j<fp->pInput->nNumRanks; j++)    {	for (i=0; i<fp->pInput->pNumEventRecursions[j]; i++)	{	    if (fp->ppEventAvail[j][i])	    {		if (fp->ppEvent[j][i].end_time < dmin)		{		    level = i;		    rank = j;		    dmin = fp->ppEvent[j][i].end_time;		}	    }	}    }    if (fp->bArrowAvail)    {	if (fp->arrow.end_time < dmin)	{	    *starttime = fp->arrow.start_time;	    *endtime = fp->arrow.end_time;	    return TRACEINPUT_SUCCESS;	}    }    *starttime = fp->ppEvent[rank][level].start_time;    *endtime = fp->ppEvent[rank][level].end_time;    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Get_next_primitive( const TRACE_file fp,                               int *category_index,                               int *n_tcoords, double *tcoord_base,                              int *tcoord_pos, const int tcoord_max,                               int *n_ycoords, int *ycoord_base,                               int *ycoord_pos, const int ycoord_max,                              int *n_bytes, char *byte_base,                              int *byte_pos, const int byte_max ){    int i, j, rank = 1, level = -1;    double dmin;    BOOL done = FALSE;    *n_bytes = 0;    for (j=0; j<fp->pInput->nNumRanks; j++)    {	for (i=0; i<fp->pInput->pNumEventRecursions[j]; i++)	{	    if (fp->ppEventAvail[j][i])	    {		level = i;		rank = j;		dmin = fp->ppEvent[j][i].end_time;		break;	    }	}    }    if (level == -1)    {	if (!fp->bArrowAvail)	    return TRACEINPUT_FAIL;	*category_index = RLOG_ARROW_EVENT_ID;	if (fp->arrow.leftright == RLOG_ARROW_RIGHT)	{	    PackQuadDouble(		fp->arrow.start_time, 		fp->arrow.end_time, 		n_tcoords, tcoord_base, tcoord_pos, tcoord_max);	}	else	{	    PackQuadDouble(		fp->arrow.end_time,		fp->arrow.start_time, 		n_tcoords, tcoord_base, tcoord_pos, tcoord_max);	}	PackQuadInt(	    fp->arrow.src, 	    fp->arrow.dest, 	    n_ycoords, ycoord_base, ycoord_pos, ycoord_max);	fp->bArrowAvail = (RLOG_GetNextArrow(fp->pInput, &fp->arrow) == 0);	return TRACEINPUT_SUCCESS;    }    for (j=0; j<fp->pInput->nNumRanks; j++)    {	for (i=0; i<fp->pInput->pNumEventRecursions[j]; i++)	{	    if (fp->ppEventAvail[j][i])	    {		if (fp->ppEvent[j][i].end_time < dmin)		{		    level = i;		    rank = j;		    dmin = fp->ppEvent[j][i].end_time;		}	    }	}    }    if (fp->bArrowAvail)    {	if (fp->arrow.end_time < dmin)	{	    *category_index = RLOG_ARROW_EVENT_ID;	    if (fp->arrow.leftright == RLOG_ARROW_RIGHT)	    {		PackQuadDouble(		    fp->arrow.start_time, 		    fp->arrow.end_time, 		    n_tcoords, tcoord_base, tcoord_pos, tcoord_max);	    }	    else	    {		PackQuadDouble(		    fp->arrow.end_time,		    fp->arrow.start_time, 		    n_tcoords, tcoord_base, tcoord_pos, tcoord_max);	    }	    PackQuadInt(		fp->arrow.src, 		fp->arrow.dest, 		n_ycoords, ycoord_base, ycoord_pos, ycoord_max);	    fp->bArrowAvail = (RLOG_GetNextArrow(fp->pInput, &fp->arrow) == 0);	    return TRACEINPUT_SUCCESS;	}    }    *category_index = fp->ppEvent[rank][level].event;    PackQuadDouble(	fp->ppEvent[rank][level].start_time, 	fp->ppEvent[rank][level].end_time, 	n_tcoords, tcoord_base, tcoord_pos, tcoord_max);    PackQuadInt(	fp->ppEvent[rank][level].rank, 	fp->ppEvent[rank][level].rank, 	n_ycoords, ycoord_base, ycoord_pos, ycoord_max);    fp->ppEventAvail[rank][level] = 	(RLOG_GetNextEvent(			    fp->pInput, 			    rank + fp->pInput->header.nMinRank, 			    level, 			    &fp->ppEvent[rank][level]) == 0);    return TRACEINPUT_SUCCESS;}TRACE_EXPORT int TRACE_Peek_next_composite( const TRACE_file fp,                               double *starttime, double *endtime,                               int *n_primitives, int *n_bytes ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Get_next_composite( const TRACE_file fp,                              int *category_index,                              int *n_bytes, char *byte_base,                              int *byte_pos, const int byte_max ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Get_position( TRACE_file fp, TRACE_int64_t *offset ){    return TRACEINPUT_FAIL;}TRACE_EXPORT int TRACE_Set_position( TRACE_file fp, TRACE_int64_t offset ){    return TRACEINPUT_FAIL;}TRACE_EXPORT char *TRACE_Get_err_string( int ierr ){    return "failure";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -