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

Reply via email to