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

📄 traces.c

📁 Parallel programming/Lou Baker, Bradley J.Smith .—New York:McGraw-Hill Book Co.
💻 C
字号:
/* PSPH - Parallel SPH program
 * Bradley Smith,  and Lou Baker, Dagonet Software
 */
static char sccs_id[] = "@(#) /home2/bsmith/src/psph/SCCS/s.trace.c 1.7 94/03/24";

#include "all.h"

#ifdef TRACE

typedef struct tagTrace
	{
	long tsend,trecv,tstart;	/* Time in hundredths */
	int sendcount, recvcount;
 	long bytes_send, bytes_recv;
#ifdef SYS_TRACE
	SysTimer ssys, rsys;
#endif
	} Trace;

typedef Trace *PTrace;
static PTrace traces;
static int MinTag, MaxTag;

void
InitTrace(int mintag, int maxtag)
{
 int i;
 traces = (PTrace) New((maxtag-mintag) * sizeof(Trace));
 MinTag = mintag;
 MaxTag = maxtag;
 for(i=0; i<(mintag-maxtag); i++)
	{
	traces[i].sendcount = traces[i].recvcount = 0;
	traces[i].tsend = traces[i].trecv = 0L;
	traces[i].bytes_send = traces[i].bytes_recv = 0L;
#ifdef SYS_TRACE
	InitSysTimer(&traces[i].ssys);
	InitSysTimer(&traces[i].rsys);
#endif
	}
}

void
StartSendTrace(int tag, int nbytes, int ndest)
{
 int i;
 if(tag < MinTag || tag >= MaxTag)
	return;
 i = tag-MinTag;
 traces[i].tstart = GetCurTime();
 traces[i].bytes_send += nbytes*ndest;
 traces[i].sendcount += ndest;
#ifdef SYS_TRACE
 StartSysTimer(&traces[i].ssys);
#endif
}

void
StopSendTrace(int tag)
{
 int i;
 if(tag < MinTag || tag >= MaxTag)
	return;
 i = tag-MinTag;
 traces[i].tsend += (GetCurTime() -  traces[i].tstart);
#ifdef SYS_TRACE
 StopSysTimer(&traces[i].ssys);
#endif
}

void
StartRecvTrace(int tag)
{
 int i;
 if(tag < MinTag || tag >= MaxTag)
	return;
 i = tag-MinTag;
 traces[i].tstart = GetCurTime();
 traces[i].recvcount ++;
#ifdef SYS_TRACE
 StartSysTimer(&traces[i].rsys);
#endif
}

void
StopRecvTrace(int tag, int count)
{
 int i;
 if(tag < MinTag || tag >= MaxTag)
	return;
 i = tag-MinTag;
 traces[i].trecv += (GetCurTime() -  traces[i].tstart);
 traces[i].bytes_recv += count;
#ifdef SYS_TRACE
 StopSysTimer(&traces[i].rsys);
#endif
}

void 
EndTrace()
{
 int i,k;
 int tsend=0, trecv=0;
 for(i=MinTag; i<MaxTag; i++)
	{
	k = i-MinTag;
	if(traces[k].sendcount > 0 || traces[k].recvcount > 0)
		{
		UserMessage("Trace for tag %d: trecv=%ld sent=%d(%ld) recv=%d(%ld) tsend=%ld\n",
			i, traces[k].trecv,
			traces[k].sendcount, traces[k].bytes_send,
			traces[k].recvcount, traces[k].bytes_recv,
			traces[k].tsend);
		tsend += traces[k].sendcount;
		trecv += traces[k].recvcount;
		}
	}
 UserMessage("Total sends=%d received=%d\n", tsend, trecv);
 if(Rank == 0)
	{
	UserMessage("Exiting Trace\n");
	}
}

#endif /* TRACE */

⌨️ 快捷键说明

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