Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add new entry in Release_Notes.
[simgrid.git] / teshsuite / smpi / mpich3-test / pt2pt / large_message.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2010 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6 #include <mpi.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include "mpitest.h"
10
11 /* tests send/recv of a message > 2GB. count=270M, type=long long
12    run with 3 processes to exercise both shared memory and TCP in Nemesis tests*/
13
14 int main(int argc, char *argv[])
15 {
16     int ierr, i, size, rank;
17     int cnt = 270000000;
18     int stat_cnt = 0;
19     MPI_Status status;
20     long long *cols;
21     int errs = 0;
22
23
24     MTest_Init(&argc, &argv);
25
26 /* need large memory */
27     if (sizeof(void *) < 8) {
28         MTest_Finalize(errs);
29         MPI_Finalize();
30         return 0;
31     }
32
33     ierr = MPI_Comm_size(MPI_COMM_WORLD, &size);
34     ierr = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
35     if (size != 3) {
36         fprintf(stderr, "[%d] usage: mpiexec -n 3 %s\n", rank, argv[0]);
37         MPI_Abort(MPI_COMM_WORLD, 1);
38     }
39
40     cols = malloc(cnt * sizeof(long long));
41     if (cols == NULL) {
42         printf("malloc of >2GB array failed\n");
43         errs++;
44         MTest_Finalize(errs);
45         MPI_Finalize();
46         return 0;
47     }
48
49     if (rank == 0) {
50         for (i = 0; i < cnt; i++)
51             cols[i] = i;
52         /* printf("[%d] sending...\n",rank); */
53         ierr = MPI_Send(cols, cnt, MPI_LONG_LONG_INT, 1, 0, MPI_COMM_WORLD);
54         ierr = MPI_Send(cols, cnt, MPI_LONG_LONG_INT, 2, 0, MPI_COMM_WORLD);
55     }
56     else {
57         /* printf("[%d] receiving...\n",rank); */
58         for (i = 0; i < cnt; i++)
59             cols[i] = -1;
60         ierr = MPI_Recv(cols, cnt, MPI_LONG_LONG_INT, 0, 0, MPI_COMM_WORLD, &status);
61         ierr = MPI_Get_count(&status,MPI_LONG_LONG_INT,&stat_cnt);
62         if (cnt != stat_cnt) {
63             fprintf(stderr, "Output of MPI_Get_count (%d) does not match expected count (%d).\n", stat_cnt, cnt);
64             errs++;
65         }
66         for (i = 0; i < cnt; i++) {
67             if (cols[i] != i) {
68                 /*printf("Rank %d, cols[i]=%lld, should be %d\n", rank, cols[i], i); */
69                 errs++;
70             }
71         }
72     }
73     MTest_Finalize(errs);
74     MPI_Finalize();
75     return 0;
76 }