2 /* Creator: Bronis R. de Supinski (bronis@llnl.gov) Fri Dec 20 2002 */
3 /* lost-request3.c -- lose lots of requests */
7 "$Header: /usr/gapps/asde/cvs-vault/umpire/tests/lost-request3.c,v 1.1 2003/01/13 18:31:48 bronis Exp $";
11 /* NOTE: Some value of ITERATIONS will imply resource exhaustion */
12 /* either in Umpire or MPI no matter how things are implemented */
13 /* the best we can hope for is to fail gracefully... */
14 /* UNKNOWN N breaks umpire due to running out of memory as of 12/20/02... */
15 /* FAILURE IS NOT GRACEFUL AS OF THIS TIME... */
16 #define ITERATIONS 10000
17 #define REQS_PER_ITERATION 3
18 #define REQS_LOST_PER_ITERATION 1
28 main (int argc, char **argv)
33 char processor_name[128];
35 int buf[buf_size * REQS_PER_ITERATION];
36 MPI_Request req[REQS_PER_ITERATION];
37 MPI_Status statuses[REQS_PER_ITERATION];
40 MPI_Init (&argc, &argv);
41 MPI_Comm_size (MPI_COMM_WORLD, &nprocs);
42 MPI_Comm_rank (MPI_COMM_WORLD, &rank);
43 MPI_Get_processor_name (processor_name, &namelen);
44 printf ("(%d) is alive on %s\n", rank, processor_name);
47 MPI_Barrier(MPI_COMM_WORLD);
49 /* 0 sends 1 two messages, but the request gets overwritten */
53 for (i = 0; i < ITERATIONS; i++) {
54 memset (buf, 1, buf_size*sizeof(int) * REQS_PER_ITERATION);
56 for (j = 0; j < REQS_PER_ITERATION; j++) {
57 MPI_Isend (&buf[j*buf_size], buf_size, MPI_INT,
58 1, j, MPI_COMM_WORLD, &req[j]);
61 MPI_Waitall (REQS_PER_ITERATION, req, statuses);
67 for (i = 0; i < ITERATIONS; i++) {
68 memset (buf, 2, buf_size*sizeof(int) * REQS_PER_ITERATION);
70 for (j = 0; j < REQS_PER_ITERATION; j++) {
71 MPI_Irecv (&buf[j*buf_size], buf_size, MPI_INT,
72 0, j, MPI_COMM_WORLD, &req[j]);
75 /* do some work here and get confused */
76 MPI_Waitall(REQS_PER_ITERATION-REQS_LOST_PER_ITERATION,req,statuses);
87 printf ("(%d) Finished normally\n", rank);