The following code tries to send a message, but if it takes too long the 
message is cancelled:

  #define DEADLOCK_ABORT   (30.0)

  MPI_Isend(message, count, MPI_BYTE, comm_id,
    MPI_MESSAGE_TAG, MPI_COMM_WORLD, &request);

  t0 = time(NULL);
  cancelled = FALSE;

  while(TRUE)
  {
    //do some work

    //test if message is delivered or cancelled
    MPI_Test(&request, &flag, &status);
    if (flag) break;

    //test if it takes too long
    t1 = time(NULL);
    wall = difftime(t1, t0);
    if (!cancelled and (wall > DEADLOCK_ABORT))
    {
      MPI_Cancel(&request);
      cancelled = TRUE;
      my_printf("cancelled!\n");
    }
  }

Now if I use a message size of about 5000 bytes and the message cannot be 
delivered after DEADLOCK_ABORT seconds the MPI_Cancel is executed, but still 
MPI_Test never returns TRUE, so it looks like the message cannot be cancelled 
for some reason.
I am using OpenMPI 1.4.2 on Fedora Core 13.
Any ideas?

Thanks,
Gijsbert


Reply via email to