[mpich-discuss] Re: MPI_Brecv vs multiple MPI_Irecv

Robert Kubrick robertkubrick at gmail.com
Wed Aug 27 11:03:02 CDT 2008


A buffered receive would allow the implementation to receive and  
store messages when the application is busy doing something else,  
like reading messages on a different comm. I now understand why a  
Brecv is not in the standard and it makes perfect sense, but the  
result is that on the sending you can control the size of a sending  
"queue", on the receiving side you can not.

On Aug 27, 2008, at 11:23 AM, Darius Buntinas wrote:

>
> Well, what would it mean to do a buffered receive?
>
> This?
>   buf = malloc(BUF_SZ);
>   MPI_Irecv(buf,...);
>   MPI_Wait(...);
>   memcpy(recv_ptr, buf, BUF_SZ);
>
> What would be the benefit?
>
> -d
>
> On 08/27/2008 10:13 AM, Robert Kubrick wrote:
>> I just found out that the standard actually doesn't have an  
>> MPI_Brecv call.
>> Any reason why the recv can not buffer messages in a user-provided  
>> memory space, as per MPI_Battach/MPI_Bsend?
>> On Aug 26, 2008, at 4:17 PM, Robert Kubrick wrote:
>>> From a performance point of view, which one is better:
>>>
>>> MPI_Battach(10*sizeof(MSG))
>>> MPI_Brecv()
>>>
>>> or
>>>
>>> MPI_recv_init()
>>> MPI_recv_init()
>>> MPI_recv_init()
>>> ... /* 10 recv handlers */
>>> MPI_Start(all recv)
>>> MPI_Waitany()
>>>
>>>
>>> I understand MPI_Brecv will require an extra message copy, from  
>>> the attached buffer to the MPI_Brecv() buffer. I'd like to know  
>>> if there other differences between the two methods.
>>>
>>> Thanks,
>>> Rob
>




More information about the mpich-discuss mailing list