Hello Community,
I have a problem understanding the API for MPI_Irecv:
int MPI_Irecv( void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request );
Parameters
buf
[in] initial address of receive buffer (choice)
count
[in] number of elements in receive buffer (integer)
datatype
[in] datatype of each receive buffer element (handle)
source
[in] rank of source (integer)
tag
[in] message tag (integer)
comm
[in] communicator (handle)
request
[out] communication request (handle)
What exactly does "count" mean here?
Is it the number of elements that have been received *thus far* in the buffer?
Or is it the number of elements that are expected to be received, and hence MPI_Test will tell me that the receive is not complete untill "count" number of elements have not been received?
Here's the reason why I have a problem (and I think I may be completely stupid here, I'd appreciate your patience):
I have node 1 transmit data to node 2, in a pack of 80 bytes:
Mon Aug 20 11:09:04 2012[1,1]<stdout>: Finished transmitting 80 bytes to 2 node with Tag 1000
On the receiving end:
MPI_Irecv(
(void*)this->receivebuffer,/* the receive buffer */
this->receive_packetsize, /* 80 */
MPI_BYTE, /* The data type expected */
this->transmittingnode, /* The node from which to receive */
this->uniquetag, /* Tag */
MPI_COMM_WORLD, /* Communicator */
&Irecv_request /* request handle */
);
I see that node 1 tells me that the transmit was successful using the MPI_Test:
MPI_Test(&Isend_request, &SendComplete, &ISend_status);
which returns me "true" on Node 1 (sender).
However, I am never able to receive the payload on Node 2:
Mon Aug 20 11:09:04 2012[1,2]<stdout>:Attemting to receive payload from node 1 with tag 1000, receivepacketsize: 80
I am using MPI_Issend to send payload between node 1 and node 2.
Does anyone see what could be going wrong?
Thanks a lot
Devendra
|