george.
On Apr 15, 2008, at 3:14 PM, slimti...@gmx.de wrote:
I encountered some problems when using MPI_CANCEL. I callRequest::Cancel followed by Request::Wait to ensure that the request has been cancelled. However Request::Wait does not return when I send biggermessages. The following code should reproduce this behaviour: #include "mpi.h" #include <iostream> using namespace std; enum Tags { TAG_UNMATCHED1, TAG_UNMATCHED2 }; int main() { MPI::Init(); const int rank = MPI::COMM_WORLD.Get_rank(); const int numProcesses = MPI::COMM_WORLD.Get_size(); const int masterRank = 0; if (rank == masterRank) { cout << "master" << endl; const int numSlaves = numProcesses - 1; for(int i = 0; i < numSlaves; ++i) { const int slaveRank = i + 1; int buffer; MPI::COMM_WORLD.Recv(&buffer, 1, MPI::INT, slaveRank, TAG_UNMATCHED1); } } else { cout << "slave " << rank << endl; //const int size = 1; const int size = 10000; int buffer[size]; MPI::Request request = MPI::COMM_WORLD.Isend(buffer, size, MPI::INT, masterRank, TAG_UNMATCHED2); cout << "slave ("<< rank<<"): sent data" << endl; request.Cancel(); cout << "slave ("<< rank<<"): cancel issued" << endl; request.Wait(); cout << "slave ("<< rank<<"): finished" << endl; } MPI::Finalize(); return 0; } If I set size to 1, everything works as expected, the slave process finishes execution. However if I use a bigger buffer (in this case 10000) the wait blocks forever. That's the output of the program when run with two processes: master slave 1 slave (1): sent data slave (1): cancel issued Have I misinterpreted the standard? Or does Request::Wait block until the message is delievered? _______________________________________________ users mailing list us...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/users
smime.p7s
Description: S/MIME cryptographic signature