Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

understanding MPI send differences

Ok let's start, I've a bit of confusion in my head.

SEND: it is blocking. The sender will waits until the receiver has posted the corresponding RECV.

SSEND: it is blocking and the sender will NOT ONLY waits until the receiver has posted the corresponding RECV, but it will wait for the ack of the RECV. It means the RECV run fine.

BSEND: it is non blocking. The process can go ahead to execute its part of code. The data is stored in a buffer properly allocated before.

ISEND: it is non blocking. The process can go ahead to execute its part of code. The data is NOT stored in a buffer: you must not overwrite the data you're sending until you're sure the ISEND has run fine (WAIT/ TEST).

So.. do ISEND and BSEND only differs for the buffer?

like image 320
FrancescoN Avatar asked Jul 16 '15 22:07

FrancescoN


People also ask

What is the difference between MPI_Send () and MPI_Isend () methods?

MPI_Isend. It is the non-blocking version of MPI_Send . When this function is called the function returns immediately but runs MPI_Send actions in the background of the process. Therefore, After the function returns, the data must not be modified unless MPI_Test and MPI_Wait confirm MPI_Isend is completed.

Is send () blocking in MPI?

The MPI standard requires that a blocking send call blocks (and hence NOT return to the call) until the send buffer is safe to be reused. Similarly, the Standard requires that a blocking receive call blocks until the receive buffer actually contains the intended message.

What are the differences between blocking and non-blocking send in MPI?

A nonblocking send will return as soon as possible, whereas a blocking send will return after the data has been copied out of the sender memory. The use of nonblocking sends is advantageous in these cases only if data copying can be concurrent with computation.


1 Answers

Yes--the difference between ISEND and BSEND is the buffer.

ISEND is a non-blocking send that is performed in-place.

BSEND is a non-blocking send that can be buffered in a segment of memory specified by MPI_Buffer_Attach.

The BSEND function was created to allow the programmer to specify exactly where data is being buffered.

It is important to note that, much like with ISEND, you must also check the status of all sends using the BSEND buffer so as to not overflow the buffer or overwrite pending BSEND's.

like image 138
Kris Lange Avatar answered Nov 15 '22 09:11

Kris Lange