/*****************************************************************************/
/* "NetPIPE" -- Network Protocol Independent Performance Evaluator. */
/* Copyright 1997, 1998 Iowa State University Research Foundation, Inc. */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation. You should have received a copy of the */
/* GNU General Public License along with this program; if not, write to the */
/* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* */
/* * mpi.c ---- MPI calls source */
/*****************************************************************************/
#include "netpipe.h"
#include <sndrcv.h>
void RCV_(long *type, void *buf, long *lenbuf, long *lenmes, long *nodesel, long *nodefrom, long *sync);
void SND_(long *type, void *buf, long *lenbuf, long *node, long *sync);
void Init(ArgStruct *p, int* pargc, char*** pargv)
{
PBEGIN_(*pargc, *pargv);
}
void Setup(ArgStruct *p)
{
long nprocs;
nprocs = NNODES_();
p->prot.nid = NODEID_();
{
char s[255];
gethostname(s,253);
printf("%d: %s\n",p->prot.nid,s); fflush(stdout);
}
if (nprocs < 2)
{
printf("Need at least two processes, we have %d\n", nprocs); fflush(stdout);
exit(-2);
}
p->tr = p->rcv = 0;
if (p->prot.nid == 0) {
p->tr = 1;
p->prot.nbor = nprocs-1;
} else if( p->prot.nid == nprocs-1 ) {
p->rcv = 1;
p->prot.nbor = 0;
}
}
void Sync(ArgStruct *p)
{
long type = MSGCHR;
SYNCH_(&type);
}
void PrepareToReceive(ArgStruct *p)
{
/*
The TCGMSG interface doesn't have a method to pre-post
a buffer for reception of data.
*/
}
void SendData(ArgStruct *p)
{
long type = MSGCHR;
long sync_snd = 0;
long lbufflen = p->bufflen;
SND_( &type, p->s_ptr, &lbufflen, &p->prot.nbor, &sync_snd);
}
void RecvData(ArgStruct *p)
{
long lenmes;
long nodefrom;
long type = MSGCHR;
long sync_rcv = 1;
long lbufflen = p->bufflen;
RCV_ ( &type, p->r_ptr, &lbufflen, &lenmes, &p->prot.nbor, &nodefrom, &sync_rcv) ;
}
void SendTime(ArgStruct *p, double *t)
{
long ttype;
long lenbuf;
long sync_snd = 1;
ttype = MSGDBL;
lenbuf = sizeof(double);
SND_( &ttype, t, &lenbuf, &p->prot.nbor, &sync_snd);
}
void RecvTime(ArgStruct *p, double *t)
{
long lenmes;
long nodefrom;
long ttype;
long lenbuf;
long sync_rcv = 1;
ttype = MSGDBL;
lenbuf = sizeof(double);
RCV_( &ttype, t, &lenbuf, &lenmes, &p->prot.nbor, &nodefrom, &sync_rcv);
}
void SendRepeat(ArgStruct *p, int n)
{
long ttype;
long lenbuf;
long sync_snd = 1;
ttype = MSGINT;
lenbuf = sizeof(int);
SND_( &ttype, &n, &lenbuf, &p->prot.nbor, &sync_snd);
}
void RecvRepeat(ArgStruct *p, int *n)
{
long lenmes;
long nodefrom;
long ttype;
long lenbuf;
long sync_rcv = 1;
ttype = MSGINT;
lenbuf = sizeof(int);
RCV_( &ttype, n, &lenbuf, &lenmes, &p->prot.nbor, &nodefrom, &sync_rcv);
}
void CleanUp(ArgStruct *p)
{
PEND_();
}
void Reset(ArgStruct *p)
{
}
void AfterAlignmentInit(ArgStruct *p)
{
}
syntax highlighted by Code2HTML, v. 0.9.1