Hi Dick - thanks for the correction.  You are (of course) absolutely right.  I 
was getting blocking and synchronous confused (again).  Need to remember to 
fully engage brain before I type. ;-)

-bill


From: users-boun...@open-mpi.org [mailto:users-boun...@open-mpi.org] On Behalf 
Of Richard Treumann
Sent: Thursday, May 06, 2010 10:49 AM
To: Open MPI Users
Subject: Re: [OMPI users] MPI_Bsend vs. MPI_Ibsend


An MPI send (of any kind), is defined by "local completion semantics". When a 
send is complete, the send buffer may be reused. The only kind of send that 
gives any indication whether the receive is posted is the synchronous send. 
Neither standard send nor buffered send tell the sender if the recv was posted.

The difference between blocking and nonblocking is that a return from a 
blocking send call indicates the send buffer may be reused. A return from a 
nonblocking send does not allow the send buffer tpo be reused (but other things 
can be done). The send buffer becomes available to reuse after a wait or 
successful test.

Dick Treumann - MPI Team
IBM Systems & Technology Group
Dept X2ZA / MS P963 -- 2455 South Road -- Poughkeepsie, NY 12601
Tele (845) 433-7846 Fax (845) 433-8363


[cid:image001.gif@01CAED32.D4DA1450]Bill Rankin ---05/06/2010 10:35:13 
AM---Actually the 'B' in MPI_Bsend() specifies that it is a blocking *buffered* 
send. So if I remember m

From:


Bill Rankin <bill.ran...@sas.com>


To:


Open MPI Users <us...@open-mpi.org>


List-Post: users@lists.open-mpi.org
Date:


05/06/2010 10:35 AM


Subject:


Re: [OMPI users] MPI_Bsend vs. MPI_Ibsend


Sent by:


users-boun...@open-mpi.org

________________________________



Actually the 'B' in MPI_Bsend() specifies that it is a blocking *buffered* 
send.  So if I remember my standards correctly, this call requires:

1) you will have to explicitly manage the send buffers via 
MPI_Buffer_[attach|detach](), and

2) the send will block until a corresponding receive is posted.

The MPI_Ibsend() is the immediate version of the above and will return w/o the 
requirement for the corresponding received.  Since it is a buffered send the 
local data copy should be completed before it returns, allowing you to change 
the contents of the local data buffer.  But there is no guaranty that the 
message has been send, so you should not reuse the send buffer until after 
verifying the completion of the send via MPI_Wait() or similar.

In your example, since MPI_Test() won't block, you can have a problem.  Use 
MPI_Wait() instead or change your send buffer to one that is not being used.

-bill



-----Original Message-----
From: users-boun...@open-mpi.org [mailto:users-boun...@open-mpi.org] On Behalf 
Of Jovana Knezevic
Sent: Thursday, May 06, 2010 4:44 AM
To: us...@open-mpi.org
Subject: [OMPI users] MPI_Bsend vs. MPI_Ibsend

Dear all,

Could anyone please clarify me the difference between MPI_Bsend and
MPI_Ibsend? Or, in other words, what exactly is "blocking" in
MPI_Bsend, when the data is stored in the buffer and we "return"? :-)
Another, but similar, question:

What about the data-buffer - when can it be reused in each of the
cases - simple examples:

for (i=0; i<NUMBER_OF_SLAVES; i++) {

MPI_Bsend (&data_buffer[0], ..., slave_id1...);

}  // Can any problem occur here, since we send the data_buffer several times?

for (i=0; i<NUMBER_OF_SLAVES; i++) {

MPI_Ibsend (&data_buffer[0], ..., slave[i]..., &request);
MPI_Test(&request...)

}  // Any difference to previous example? Concerning the re-use of data_buffer?

Thank you a lot in advance.

Regards
Jovana
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users

Reply via email to