1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
#include <mpi.h>
#include <printf.hpp>

int main(int argc, char** argv) {
   MPI_Init(&argc, &argv);

   int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   int nof_processes; MPI_Comm_size(MPI_COMM_WORLD, &nof_processes);

   if (rank) {
      MPI_Send(&rank, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
   } else {
      for (int i = 0; i + 1 < nof_processes; ++i) {
	 MPI_Status status;
	 int msg;
	 MPI_Recv(&msg, 1, MPI_INT, MPI_ANY_SOURCE,
	    0, MPI_COMM_WORLD, &status);
	 int count;
	 MPI_Get_count(&status, MPI_INT, &count);
	 if (count == 1) {
	    fmt::printf("%d\n", msg);
	 }
      }
   }

   MPI_Finalize();
}