Blocking send/recv, as the name suggest, stop processing your master and slave code until the data is received on the slave side.
Nonblocking send/recv wouldn't stop, instead you must check the status on the slave side to see if data has been sent. Nonblocking is faster on the master side because the master doesn't need to wait for the slave to receive the data to continue.
So when you say you want your master to send "as fast as possible", I suppose you meant get back to running your code as soon as possible. In that case you would want nonblocking. However when you say you want the slaves to receive data faster, it seems you're implying the actual data transmission across the network. I believe the data transmission speed is not dependent on whether the it is blocking or nonblocking.
If I have a master-process that needs to send a chunk of (different) data to each of my N slave processes as fast as possible, would I receive the chunk in each of the slaves faster if the master would launch N threads each doing a blocking send or would it be better to launch N nonblocking sends in the master.
I'm currently using OpenMPI on ethernet but might the approach be different with different types of networks ?
thanks in advance,
users mailing list