Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add new entry in Release_Notes.
[simgrid.git] / teshsuite / smpi / mpich3-test / pt2pt / bsend5.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 #include <stdio.h>
7 #include "mpi.h"
8 #include "mpitest.h"
9
10 #define BUFSIZE 2000
11 int main(int argc, char *argv[])
12 {
13     MPI_Status status;
14     MPI_Comm comm, scomm;
15     int a[10], b[10];
16     int buf[BUFSIZE], *bptr, bl, i, j, rank, size, color, errs = 0;
17
18     MTest_Init(0, 0);
19     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
20     color = rank % 2;
21     MPI_Comm_split(MPI_COMM_WORLD, color, rank, &scomm);
22     MPI_Intercomm_create(scomm, 0, MPI_COMM_WORLD, 1 - color, 52, &comm);
23     MPI_Comm_rank(comm, &rank);
24     MPI_Comm_remote_size(comm, &size);
25     MPI_Buffer_attach(buf, BUFSIZE);
26
27     for (j = 0; j < 10; j++) {
28         for (i = 0; i < 10; i++) {
29             a[i] = (rank + 10 * j) * size + i;
30         }
31         MPI_Bsend(a, 10, MPI_INT, 0, 27 + j, comm);
32     }
33     if (rank == 0) {
34
35         for (i = 0; i < size; i++) {
36             for (j = 0; j < 10; j++) {
37                 int k;
38                 status.MPI_TAG = -10;
39                 status.MPI_SOURCE = -20;
40                 MPI_Recv(b, 10, MPI_INT, i, 27 + j, comm, &status);
41
42                 if (status.MPI_TAG != 27 + j) {
43                     errs++;
44                     printf("Wrong tag = %d\n", status.MPI_TAG);
45                 }
46                 if (status.MPI_SOURCE != i) {
47                     errs++;
48                     printf("Wrong source = %d\n", status.MPI_SOURCE);
49                 }
50                 for (k = 0; k < 10; k++) {
51                     if (b[k] != (i + 10 * j) * size + k) {
52                         errs++;
53                         printf("received b[%d] = %d from %d tag %d\n", k, b[k], i, 27 + j);
54                     }
55                 }
56             }
57         }
58     }
59     MPI_Buffer_detach(&bptr, &bl);
60
61     MPI_Comm_free(&scomm);
62     MPI_Comm_free(&comm);
63
64     MTest_Finalize(errs);
65
66     MPI_Finalize();
67     return 0;
68 }