HP-MPI User's Guide (11th Edition)
Example applications
ping_pong_ring.c (Windows)
Appendix A 239
start = MPI_Wtime();
for (i = 0; i < NLOOPS; i++) {
SETBUF();
SEND(1000 + i);
CLRBUF();
RECV(2000 + i);
CHKBUF();
}
stop = MPI_Wtime();
sprintf(&str[strlen(str)],
"%d bytes: %.2f usec/msg\n", nbytes,
(stop - start) / NLOOPS / 2 * 1024 * 1024);
if (nbytes > 0) {
sprintf(&str[strlen(str)],
"%d bytes: %.2f MB/sec\n", nbytes,
nbytes / (1024. * 1024.) /
((stop - start) / NLOOPS / 2));
}
fflush(stdout);
} else if (rank == (root+1)%size) {
/*
* warm-up loop
*/
partner = root;
for (i = 0; i < 5; i++) {
RECV(1);
SEND(1);
}
for (i = 0; i < NLOOPS; i++) {
CLRBUF();
RECV(1000 + i);
CHKBUF();
SETBUF();
SEND(2000 + i);
}
}
MPI_Bcast(str, 1024, MPI_CHAR, root, MPI_COMM_WORLD);
if (rank == 0) {
printf("%s", str);
}
}
free(obuf);
MPI_Finalize();
exit(0);
}
ping_pong_ring.c output
Example output might look like: