I have an algorithm that collects information in a tree like manner using nonblocking communication. Some nodes do not receive information from other nodes, so there are no outstanding requests on those nodes. On all processors, I check for the incoming messages using MPI_Testsome(). MPI_Testsome fails with OpenMPI, however if the request length is zero. Here is a code that can be run with only one processor that shows the same behavior:
///////////////////////////////////////////
#include "mpi.h"
#include <stdio.h>
int main( int argc, char *argv[])
{
int myid, numprocs;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
printf("Hello from processor %i of %i\n", myid, numprocs);
int size = 0;
int num_done = 0;
MPI_Status* stat = 0;
MPI_Request* req = 0;
int* done_indices = 0;
MPI_Testsome( size, req, &num_done, done_indices, stat);
printf("Finalizing on processor %i of %i\n", myid, numprocs);
MPI_Finalize();
return 0;
}
/////////////////////////////////////////
The output using OpenMPI is:
Hello from processor 0 of 1
[mymachine:09115] *** An error occurred in MPI_Testsome
[mymachine:09115] *** on communicator MPI_COMM_WORLD
[mymachine:09115] *** MPI_ERR_REQUEST: invalid request
[mymachine:09115] *** MPI_ERRORS_ARE_FATAL (goodbye)
1 process killed (possibly by Open MPI)
Many other MPI implementations support this, and reading the standard, it
seems like it should be OK.
Thanks,
Tom
config.log.bz2
Description: Binary data
testsome_test.out
Description: Binary data
testsome_test.c
Description: Binary data
ompi_info.out
Description: Binary data
