Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update ignore list after file move.
[simgrid.git] / examples / smpi / mc / sendsend.c
1 /* A simple bugged MPI_Send and MPI_Recv test: it deadlocks when MPI_Send are blocking */
2
3 /* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved.          */
4
5 /* This program is free software; you can redistribute it and/or modify it
6  * under the terms of the license (GNU LGPL) which comes with this package. */
7
8 #include <mpi.h>
9 #include <stdio.h>
10
11 int main(int argc, char** argv)
12 {
13   int size;
14   int rank;
15   MPI_Status status;
16
17   /* Initialize MPI */
18   int err = MPI_Init(&argc, &argv);
19   if (err != MPI_SUCCESS) {
20     printf("MPI initialization failed!\n");
21     exit(1);
22   }
23
24   MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */
25   MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */
26   if (size < 2) {
27     printf("run this program with exactly 2 processes (-np 2)\n");
28     MPI_Finalize();
29     exit(0);
30   }
31
32   int recv_buff;
33   if (rank == 0) {
34     MPI_Send(&rank, 1, MPI_INT, 1, 42, MPI_COMM_WORLD);
35     printf("Sent %d to rank 1\n", rank);
36     MPI_Recv(&recv_buff, 1, MPI_INT, 1, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
37     printf("rank 0 recv the data\n");
38   } else {
39     MPI_Send(&rank, 1, MPI_INT, 0, 42, MPI_COMM_WORLD);
40     printf("Sent %d to rank 0\n", rank);
41     MPI_Recv(&recv_buff, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
42     printf("rank 1 recv the data\n");
43   }
44
45   MPI_Finalize();
46
47   return 0;
48 }