The MPI_Cancel is only supported for receive requests. It's a no-op for sends. Therefore your request never get canceled and the wait will block until the request completion ... which means it will block forever (as there is no receive corresponding to the request).

  george.

On Apr 15, 2008, at 3:14 PM, slimti...@gmx.de wrote:
I encountered some problems when using MPI_CANCEL. I call
Request::Cancel followed by Request::Wait to ensure that the request has been cancelled. However Request::Wait does not return when I send bigger
messages. 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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to