1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
4 * (C) 2007 by Argonne National Laboratory.
5 * See COPYRIGHT in top-level directory.
14 * This test makes sure that each process can send to each other process.
15 * If there are bugs in the handling of request completions or in
16 * queue operations, then this test may fail on them (it did with
17 * early EagerShort handling).
21 #define MYBUFSIZE 16*1024
22 static int buffer[MAXPES][MYBUFSIZE];
26 int main(int argc, char *argv[])
32 MPI_Request request[MAXPES];
35 MTest_Init(&argc, &argv);
36 MPI_Comm_rank(MPI_COMM_WORLD, &self);
37 MPI_Comm_size(MPI_COMM_WORLD, &npes);
40 fprintf(stderr, "This program requires a comm_world no larger than %d", MAXPES);
41 MPI_Abort(MPI_COMM_WORLD, 1);
44 for (size = 1; size <= MYBUFSIZE; size += size) {
46 for (count = 0; count < NUM_RUNS; count++) {
47 MPI_Barrier(MPI_COMM_WORLD);
49 for (i = 0; i < npes; i++) {
51 MPI_Irecv(buffer[i], size, MPI_INT, i,
52 MPI_ANY_TAG, MPI_COMM_WORLD, &request[i]);
55 for (i = 0; i < npes; i++) {
57 MPI_Send(buffer[self], size, MPI_INT, i, 0, MPI_COMM_WORLD);
60 for (i = 0; i < npes; i++) {
62 MPI_Wait(&request[i], &status);
66 MPI_Barrier(MPI_COMM_WORLD);
70 secs = secs / (double) NUM_RUNS;
71 MTestPrintfMsg(1, "length = %d ints\n", size);
75 /* Simple completion is all that we normally ask of this program */