2 /* Creator: Jeffrey Vetter (j-vetter@llnl.gov) Mon Nov 1 1999 */
3 /* lost-request.c -- overwrite a request and essentially lose a synch point */
7 "$Header: /usr/gapps/asde/cvs-vault/umpire/tests/no-error-persistent-all-completions.c,v 1.1 2002/01/14 18:58:06 bronis Exp $";
16 #define NUM_COMPLETION_MECHANISMS 8
19 main (int argc, char **argv)
23 MPI_Comm comm = MPI_COMM_WORLD;
24 char processor_name[128];
26 int buf[BUF_SIZE * 2];
27 int i, j, k, index, outcount, flag;
30 MPI_Status aStatus[2];
33 MPI_Init (&argc, &argv);
34 MPI_Comm_size (comm, &nprocs);
35 MPI_Comm_rank (comm, &rank);
36 MPI_Get_processor_name (processor_name, &namelen);
37 printf ("(%d) is alive on %s\n", rank, processor_name);
41 /* set up persistent sends... */
42 MPI_Send_init (&buf[0], BUF_SIZE, MPI_INT, 1, 0, comm, &aReq[0]);
43 MPI_Send_init (&buf[BUF_SIZE], BUF_SIZE, MPI_INT, 1, 1, comm, &aReq[1]);
45 /* initialize the send buffers */
46 for (i = 0; i < BUF_SIZE; i++) {
48 buf[BUF_SIZE + i] = BUF_SIZE - 1 - i;
52 for (k = 0; k < (NUM_COMPLETION_MECHANISMS * 2); k++) {
54 /* zero out the receive buffers */
55 bzero (buf, sizeof(int) * BUF_SIZE * 2);
58 MPI_Barrier(MPI_COMM_WORLD);
61 /* start the persistent sends... */
63 MPI_Startall (2, &aReq[0]);
66 for (j = 0; j < 2; j++) {
71 /* complete the sends */
75 for (j = 0; j < 2; j++) {
76 MPI_Wait (&aReq[j], &aStatus[j]);
82 MPI_Waitall (2, aReq, aStatus);
87 for (j = 0; j < 2; j++) {
88 MPI_Waitany (2, aReq, &index, aStatus);
93 /* use MPI_Waitsome */
96 MPI_Waitsome (2, aReq, &outcount, indices, aStatus);
103 for (j = 0; j < 2; j++) {
106 MPI_Test (&aReq[j], &flag, &aStatus[j]);
112 /* use MPI_Testall */
115 MPI_Testall (2, aReq, &flag, aStatus);
120 /* use MPI_Testany */
121 for (j = 0; j < 2; j++) {
124 MPI_Testany (2, aReq, &index, &flag, aStatus);
130 /* use MPI_Testsome */
135 MPI_Testsome (2, aReq, &outcount, indices, aStatus);
146 else if (rank == 1) {
147 /* set up receives for all of the sends */
148 for (j = 0; j < 2; j++) {
149 MPI_Irecv (&buf[j * BUF_SIZE], BUF_SIZE,
150 MPI_INT, 0, j, comm, &aReq[j]);
152 /* complete all of the receives... */
153 MPI_Waitall (2, aReq, aStatus);
157 MPI_Barrier(MPI_COMM_WORLD);
160 /* free the persistent requests */
161 for (i = 0 ; i < 2; i++) {
162 MPI_Request_free (&aReq[i]);
167 printf ("(%d) Finished normally\n", rank);