Skip to content
Snippets Groups Projects
msgorder.cpp 1004 B
Newer Older
  • Learn to ignore specific revisions
  • Ondrej Meca's avatar
    Ondrej Meca committed
    
    #include "mpi.h"
    #include <unistd.h>
    #include <vector>
    
    int main(int argc, char **argv) {
    	MPI_Init(&argc, &argv);
    
    	int rank, size;
    	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    	MPI_Comm_size(MPI_COMM_WORLD, &size);
    
    	std::vector<int> data({rank});
    	if (rank == 0) {
    		MPI_Send(data.data(), data.size(), MPI_INT, 1, 0, MPI_COMM_WORLD); // to 1
    		usleep(1);
    		MPI_Send(data.data(), data.size(), MPI_INT, 2, 0, MPI_COMM_WORLD); // to 2
    	}
    	if (rank == 1) {
    		MPI_Recv(data.data(), data.size(), MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); // from 0
    		MPI_Send(data.data(), data.size(), MPI_INT, 2, 0, MPI_COMM_WORLD); // to 2
    	}
    	if (rank == 2) {
    		MPI_Status status;
    		MPI_Recv(data.data(), data.size(), MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); // from *
    		printf("receive from %d\n", status.MPI_SOURCE);
    		MPI_Recv(data.data(), data.size(), MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); // from *
    		printf("receive from %d\n", status.MPI_SOURCE);
    	}
    
    	MPI_Finalize();
    	return 0;
    }