13 int main(
int narg,
char *arg[])
21 world = MPI_COMM_WORLD;
22 MPI_Comm_size(world,&np);
34 for(i=0;i<comm.
np;++
i, data+=3+data[2]) {
35 data[0] =
i, data[1] = comm.
id, data[2] = 1;
37 if(comm.
id&1) data[2] = 2, data[4] = data[3]+1;
42 for(;data!=end; data+=3+data[2]) {
44 printf(
"%u -> %u:",data[1],data[0]);
45 for(i=0;i<data[2];++
i) printf(
" %u",data[3+i]);
55 for(;data!=end; data+=3+data[2]) {
57 printf(
"%u <- %u:",data[0],data[1]);
58 for(i=0;i<data[2];++
i) printf(
" %u",data[3+i]);
64 fail(1,__FILE__,__LINE__,
"failure on %u",comm.
id);
67 for(;data!=end; data+=3+data[2]) {
69 if(data[3]!=data[1]*2)
70 fail(1,__FILE__,__LINE__,
"failure on %u",comm.
id);
71 if(data[1]&1 && (data[2]!=2 || data[4]!=data[3]+1))
72 fail(1,__FILE__,__LINE__,
"failure on %u",comm.
id);
74 if(sum != comm.
np*(comm.
np-1)/2)
75 fail(1,__FILE__,__LINE__,
"failure on %u",comm.
id);
81 "test successful %u/%u",(
unsigned)comm.
id,(
unsigned)comm.
np);
static double sum(struct xxt *data, double v, uint n, uint tag)
int main(int narg, char *arg[])
static void comm_free(struct comm *c)
#define buffer_reserve(b, max)
establishes some macros to establish naming conventions
static void comm_init(struct comm *c, comm_ext ce)
void diagnostic(const char *prefix, const char *file, unsigned line, const char *fmt,...)
void fail(int status, const char *file, unsigned line, const char *fmt,...)