Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] Allgather in inter-communicator bug,
From: Edgar Gabriel (gabriel_at_[hidden])
Date: 2010-05-20 13:33:36


thanks for pointing the problem out. I checked in the code, the problem
is the MPI layer itself. The following check prevents us from doing
anything

----
e.g. ompi/mpi/c/allgather.c
   if ((MPI_IN_PLACE != sendbuf && 0 == sendcount) ||
        (0 == recvcount)) {
        return MPI_SUCCESS;
    }
----
so the problem is not in the modules/algorithms but in the API layer,
which did not encounter for intercommunicators correctly. I'll try to
fix it.
Thanks
edgar
On 05/20/2010 10:48 AM, Battalgazi YILDIRIM wrote:
> Hi,
> 
> you are right, I should have provided C++ and Fortran example, so I am
> doing now
> 
> 
> Here is "cplusplus.cpp"
> 
> #include <mpi.h>
> #include <iostream>
> using namespace std;
> int main()
> {
>     MPI::Init();
>     char command[] = "./a.out";
>     MPI::Info info;
>     MPI::Intercomm child = MPI::COMM_WORLD.Spawn(command, NULL, 8,info, 0);
>     int a[8]={0,0,0,0,0,0,0,0};
>     int dummy;
>     child.Allgather(&dummy, 0, MPI::INT, a, 1, MPI::INT);
>     child.Disconnect();
>     cout << "a[";
>     for ( int i = 0; i < 7; i++ )
>         cout << a[i] << ",";
>     cout << a[7] << "]" << endl;
> 
>     MPI::Finalize();
> }
> 
> 
> Here is again "fortran.f90"
> 
> program main
>  use mpi
>  implicit none
>  integer :: parent, rank, val, dummy, ierr
>  call MPI_Init(ierr)
>  call MPI_Comm_get_parent(parent, ierr)
>  call MPI_Comm_rank(parent, rank, ierr)
>  val = rank + 1
>  call MPI_Allgather(val,   1, MPI_INTEGER, &
>                     dummy, 0, MPI_INTEGER, &
>                     parent, ierr)
>  call MPI_Comm_disconnect(parent, ierr)
>  call MPI_Finalize(ierr)
> end program main
> 
> here is how you build and run
> 
> -bash-3.2$ mpif90 fortran.f90
> -bash-3.2$ mpiCC -o parent cplusplus.cpp
> -bash-3.2$ ./parent
> a[0,0,0,0,0,0,0,0]
> 
> 
> 
> If I use mpich2,
> -bash-3.2$ mpif90 fortran.f90
> -bash-3.2$ mpiCC -o parent cplusplus.cpp
> -bash-3.2$ ./parent
> a[1,2,3,4,5,6,7,8]
> 
> I hope that you can repeat this problem to see problem with OPENMPI,
> 
> Thanks,
> 
> 
> On Thu, May 20, 2010 at 10:09 AM, Jeff Squyres <jsquyres_at_[hidden]
> <mailto:jsquyres_at_[hidden]>> wrote:
> 
>     Can you send us an all-C or all-Fortran example that shows the problem?
> 
>     We don't have easy access to test through the python bindings.
>      ...ok, I admit it, it's laziness on my part.  :-)  But having a
>     pure Open MPI test app would also remove some possible variables and
>     possible sources of error.
> 
> 
>     On May 20, 2010, at 9:43 AM, Battalgazi YILDIRIM wrote:
> 
>     > Hi Jody,
>     >
>     > I think that it is correct, you can  test this example in your
>     desktop,
>     >
>     > thanks,
>     >
>     > On Thu, May 20, 2010 at 3:18 AM, jody <jody.xha_at_[hidden]
>     <mailto:jody.xha_at_[hidden]>> wrote:
>     > Hi
>     > I am really no python expert, but it looks to me as if you were
>     > gathering arrays filled with zeroes:
>     >  a = array('i', [0]) * n
>     >
>     > Shouldn't this line be
>     >  a = array('i', [r])*n
>     > where r is the rank of the process?
>     >
>     > Jody
>     >
>     >
>     > On Thu, May 20, 2010 at 12:00 AM, Battalgazi YILDIRIM
>     > <yildirimga_at_[hidden] <mailto:yildirimga_at_[hidden]>> wrote:
>     > > Hi,
>     > >
>     > >
>     > > I am trying to use intercommunicator ::Allgather between two
>     child process.
>     > > I have fortran and Python code,
>     > > I am using mpi4py for python. It seems that ::Allgather is not
>     working
>     > > properly in my desktop.
>     > >
>     > >  I have contacted first mpi4py developers (Lisandro Dalcin), he
>     simplified
>     > > my problem and provided two example files (python.py and
>     fortran.f90,
>     > > please see below).
>     > >
>     > > We tried with different MPI vendors, the following example
>     worked correclty(
>     > > it means the final print out should be array('i', [1, 2, 3, 4,
>     5, 6, 7, 8])
>     > > )
>     > >
>     > > However, it is not giving correct answer in my two desktop
>     (Redhat and
>     > > ubuntu) both
>     > > using OPENMPI
>     > >
>     > > Could yo look at this problem please?
>     > >
>     > > If you want to follow our discussion before you, you can go to
>     following
>     > > link:
>     > >
>     http://groups.google.com/group/mpi4py/browse_thread/thread/c17c660ae56ff97e
>     > >
>     > > yildirim_at_memosa:~/python_intercomm$ more python.py
>     > > from mpi4py import MPI
>     > > from array import array
>     > > import os
>     > >
>     > > progr = os.path.abspath('a.out')
>     > > child = MPI.COMM_WORLD.Spawn(progr,[], 8)
>     > > n = child.remote_size
>     > > a = array('i', [0]) * n
>     > > child.Allgather([None,MPI.INT <http://MPI.INT>],[a,MPI.INT
>     <http://MPI.INT>])
>     > > child.Disconnect()
>     > > print a
>     > >
>     > > yildirim_at_memosa:~/python_intercomm$ more fortran.f90
>     > > program main
>     > >  use mpi
>     > >  implicit none
>     > >  integer :: parent, rank, val, dummy, ierr
>     > >  call MPI_Init(ierr)
>     > >  call MPI_Comm_get_parent(parent, ierr)
>     > >  call MPI_Comm_rank(parent, rank, ierr)
>     > >  val = rank + 1
>     > >  call MPI_Allgather(val,   1, MPI_INTEGER, &
>     > >                     dummy, 0, MPI_INTEGER, &
>     > >                     parent, ierr)
>     > >  call MPI_Comm_disconnect(parent, ierr)
>     > >  call MPI_Finalize(ierr)
>     > > end program main
>     > >
>     > > yildirim_at_memosa:~/python_intercomm$ mpif90 fortran.f90
>     > >
>     > > yildirim_at_memosa:~/python_intercomm$ python python.py
>     > > array('i', [0, 0, 0, 0, 0, 0, 0, 0])
>     > >
>     > >
>     > > --
>     > > B. Gazi YILDIRIM
>     > >
>     > > _______________________________________________
>     > > users mailing list
>     > > users_at_[hidden] <mailto:users_at_[hidden]>
>     > > http://www.open-mpi.org/mailman/listinfo.cgi/users
>     > >
>     >
>     > _______________________________________________
>     > users mailing list
>     > users_at_[hidden] <mailto:users_at_[hidden]>
>     > http://www.open-mpi.org/mailman/listinfo.cgi/users
>     >
>     >
>     >
>     > --
>     > B. Gazi YILDIRIM
>     > _______________________________________________
>     > users mailing list
>     > users_at_[hidden] <mailto:users_at_[hidden]>
>     > http://www.open-mpi.org/mailman/listinfo.cgi/users
> 
> 
>     --
>     Jeff Squyres
>     jsquyres_at_[hidden] <mailto:jsquyres_at_[hidden]>
>     For corporate legal information go to:
>     http://www.cisco.com/web/about/doing_business/legal/cri/
> 
> 
>     _______________________________________________
>     users mailing list
>     users_at_[hidden] <mailto:users_at_[hidden]>
>     http://www.open-mpi.org/mailman/listinfo.cgi/users
> 
> 
> 
> 
> -- 
> B. Gazi YILDIRIM
> 
> 
> 
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users