All,
there didn't appear any discussion on the problem below, but I believe that 
this is just yet another manifestation of what you have already found as 
ticket #2009.

Best
 Wolfgang

> Howdy,
> here's a creative way to deadlock a program: create and destroy 65500 and
> some communicators and send a message on each of them:
> ----------------------------------------
> #include <mpi.h>
>
> #define CHECK(a)                              \
>   {                                           \
>     int err = (a);                            \
>     if (err != 0) std::cout << "Error in line " << __LINE__ << std::endl; \
>   }
>
> int main (int argc, char *argv[])
> {
>   int a=0, b;
>
>   MPI_Init (&argc, &argv);
>
>   for (int i=0; i<1000000; ++i)
>     {
>       if (i % 100 == 0) std::cout<< "Duplication event " << i << std::endl;
>
>       MPI_Comm dup;
>       CHECK(MPI_Comm_dup (MPI_COMM_WORLD, &dup));
>       CHECK(MPI_Allreduce(&a, &b, 1, MPI_INT, MPI_MIN, dup));
>       CHECK(MPI_Comm_free (&dup));
>     }
>
>   MPI_Finalize();
> }
> -------------------------------------------
> If you run this, for example, on two processors with OpenMPI 1.2.6 or
> 1.3.2, you'll see that the program runs until after it produces 65500 as
> output, and then just hangs -- on my system somewhere in the operating
> system poll(), running full steam.
>
> Since I take care of destroying the communicators again, I would have
> expected this to work. I use creating many communicators basically as a
> debugging tool: every object gets its own communicator to work on to
> ensure that different objects don't communicate by accident with each
> other just because they all use MPI_COMM_WORLD. It would be nice if this
> mode of using MPI could be made to work.
>
> Best & thanks in advance!
>  Wolfgang



-- 
-------------------------------------------------------------------------
Wolfgang Bangerth                email:            bange...@math.tamu.edu
                                 www: http://www.math.tamu.edu/~bangerth/

Reply via email to