Hello Everyone,

I wrote a small C++ MPI program to do an ISend:

/*some declarations here */
MPI::Request Isend_request_status;
...
...

/* do the transmission */
Isend_request_status = MPI::COMM_WORLD.Isend(this->transmitbuffer, this->transmissionsize, MPI_BYTE, (this->dbIterator)->first, std::get<0>(this->TransmissionDetails));

/* Check if the transmit was successful */
if (MPI::Request::Test(Isend_request_status))
{
    /* done :) */
}

However, building it gives the error:

no matching function for call to ‘MPI::Request::Test(MPI::Request&)’

I am using gcc-4.6 on Linux, with OpenMPI- 1.4.3.

I looked up the headers for the calls:

inline MPI::Request
MPI::Comm::Isend(const void *buf, int count,
         const MPI::Datatype & datatype, int dest, int tag) const

So, the MPI::COMM_WORLD::ISend(...) should return me variable of type MPI::Request.

And,

inline bool
MPI::Request::Test(MPI::Status &status)

This takes in the variable of type MPI::Status.


So, two questions:

(1). Is there a problem due to incompatible types? If so, how do I fix it?
(2). Why would the MPI::Request::Test take in a different type than what is returned by MPI::COMM_WORLD::ISend(...)?

It would really help if you could help me fix the example that I have shown.

I understand it would be easier to do this in C, but there are project requirements that led me to C++.

Can someone please help?

Thanks a lot.


Devendra
sd