📄 traces.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 + -