c++ - Optimal Way to Send Recv to multiple processes in MPI -
my specific problem follows: have 4 workers , 1 master process. want send messages each worker other workers. (from worker 1 2,3,4; process 2 1,3,4, etc.)
i don't care order @ messages sent, care performance. data sending big, in gigabytes.
i using isend , recv, kept getting segmentation faults. tried use sendrecv, ones seems hang in middle, possibly due deadlock. wondering best way send , receive , multiple processes.
here current code:
for(int id = 1; id < num_processes; id++) { // computation vector vec // mpi_request request; if(id != myid) mpi_isend(&vec.front(), vec.size(), mpi_bid, id, 1, mpi_comm_world, &request); }
then receiving.
for(int id = 1; id < num_processes; id++) { mpi_request request2; if(id != myid) mpi_recv(&recvvec.front(), some_large_value, mpi_bid, mpi_any_source, 1, mpi_comm_world, &request2); }
any appreciated!
if you're getting segfaults, issue other doing data transfer optimally. you're having issue somewhere else too. might want try debugger figure out what's going on. can see big post mpi debugging here (how debug mpi program?). if want free debugger, can use gdb (see this answer if don't know how that).
Comments
Post a Comment