#include #include #include #include #include static const size_t N = 2; int main() { boost::mpi::environment env; boost::mpi::communicator world; #if 1 // Serialized types fail. typedef std::string DataType; #define SEND_VALUE "how now brown cow" #else // Native MPI types succeed. typedef int DataType; #define SEND_VALUE 42 #endif DataType out(SEND_VALUE); std::vector in(N); std::vector sends; std::vector recvs; sends.reserve(N); recvs.reserve(N); std::cout << "Multiple transfers with different tags\n"; sends.clear(); recvs.clear(); for (size_t i = 0; i < N; ++i) { sends.push_back(world.isend(0, i, out)); recvs.push_back(world.irecv(0, i, in[i])); } boost::mpi::wait_all(sends.begin(), sends.end()); boost::mpi::wait_all(recvs.begin(), recvs.end()); std::cout << "Multiple transfers with same tags\n"; sends.clear(); recvs.clear(); for (size_t i = 0; i < N; ++i) { sends.push_back(world.isend(0, 0, out)); recvs.push_back(world.irecv(0, 0, in[i])); } boost::mpi::wait_all(sends.begin(), sends.end()); boost::mpi::wait_all(recvs.begin(), recvs.end()); return 0; }