Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix dist
[simgrid.git] / teshsuite / smpi / mpich3-test / coll / redscat.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2001 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6 /*
7  * Test of reduce scatter.
8  *
9  * Each processor contributes its rank + the index to the reduction,
10  * then receives the ith sum
11  *
12  * Can be called with any number of processors.
13  */
14
15 #include "mpi.h"
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include "mpicolltest.h"
19
20 int main(int argc, char **argv)
21 {
22     int err = 0, toterr;
23     int *sendbuf, recvbuf, *recvcounts;
24     int size, rank, i, sumval;
25     MPI_Comm comm;
26
27
28     MPI_Init(&argc, &argv);
29     comm = MPI_COMM_WORLD;
30
31     MPI_Comm_size(comm, &size);
32     MPI_Comm_rank(comm, &rank);
33     sendbuf = (int *) malloc(size * sizeof(int));
34     for (i = 0; i < size; i++)
35         sendbuf[i] = rank + i;
36     recvcounts = (int *) malloc(size * sizeof(int));
37     for (i = 0; i < size; i++)
38         recvcounts[i] = 1;
39
40     MTest_Reduce_scatter(sendbuf, &recvbuf, recvcounts, MPI_INT, MPI_SUM, comm);
41
42     sumval = size * rank + ((size - 1) * size) / 2;
43 /* recvbuf should be size * (rank + i) */
44     if (recvbuf != sumval) {
45         err++;
46         fprintf(stdout, "Did not get expected value for reduce scatter\n");
47         fprintf(stdout, "[%d] Got %d expected %d\n", rank, recvbuf, sumval);
48     }
49
50     MPI_Allreduce(&err, &toterr, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
51     if (rank == 0 && toterr == 0) {
52         printf(" No Errors\n");
53     }
54
55     free(sendbuf);
56     free(recvcounts);
57     MPI_Finalize();
58
59     return toterr;
60 }