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.c,v 1.1 2002/01/14 18:58:07 bronis Exp $";
18 main (int argc, char **argv)
22 int comm = MPI_COMM_WORLD;
23 char processor_name[128];
25 int buf[BUF_SIZE * 2];
26 int i, j, k, index, outcount, flag;
29 MPI_Status aStatus[2];
32 MPI_Init (&argc, &argv);
33 MPI_Comm_size (comm, &nprocs);
34 MPI_Comm_rank (comm, &rank);
35 MPI_Get_processor_name (processor_name, &namelen);
36 printf ("(%d) is alive on %s\n", rank, processor_name);
40 /* set up persistent sends... */
41 MPI_Send_init (&buf[0], BUF_SIZE, MPI_INT, 1, 0, comm, &aReq[0]);
42 MPI_Send_init (&buf[BUF_SIZE], BUF_SIZE, MPI_INT, 1, 1, comm, &aReq[1]);
44 /* initialize the send buffers */
45 for (i = 0; i < BUF_SIZE; i++) {
47 buf[BUF_SIZE + i] = BUF_SIZE - 1 - i;
51 for (k = 0; k < 4; k++) {
53 /* zero out the receive buffers */
54 bzero (buf, sizeof(int) * BUF_SIZE * 2);
57 MPI_Barrier(MPI_COMM_WORLD);
60 /* start the persistent sends... */
62 MPI_Startall (2, &aReq[0]);
65 for (j = 0; j < 2; j++) {
70 /* complete the sends */
73 for (j = 0; j < 2; j++)
74 MPI_Wait (&aReq[j], &aStatus[j]);
77 MPI_Waitall (2, aReq, aStatus);
80 /* set up receives for all of the sends */
81 for (j = 0; j < 2; j++) {
82 MPI_Irecv (&buf[j * BUF_SIZE], BUF_SIZE,
83 MPI_INT, 0, j, comm, &aReq[j]);
85 /* complete all of the receives... */
86 MPI_Waitall (2, aReq, aStatus);
90 MPI_Barrier(MPI_COMM_WORLD);
93 /* free the persistent requests */
94 for (i = 0 ; i < 2; i++) {
95 MPI_Request_free (&aReq[i]);
100 printf ("(%d) Finished normally\n", rank);