Shared memory doesn't extend between comm_spawn'd parent/child processes in Open MPI. Perhaps someday it will, but not yet.


On Jan 19, 2010, at 1:14 PM, Nicolas Bock wrote:

Hello list,

I think I understand better now what's happening, although I still don't know why. I have attached two small C codes that demonstrate the problem. The code in main.c uses MPI_Comm_spawn() to start the code in the second source, child.c. I can force the issue by running the main.c code with

mpirun -mca btl self,sm -np 1 ./main

and get this error:

--------------------------------------------------------------------------
At least one pair of MPI processes are unable to reach each other for
MPI communications.  This means that no Open MPI device has indicated
that it can be used to communicate between these processes.  This is
an error; Open MPI requires that all MPI processes be able to reach
each other.  This error can sometimes be the result of forgetting to
specify the "self" BTL.

  Process 1 ([[26121,2],0]) is on host: mujo
  Process 2 ([[26121,1],0]) is on host: mujo
  BTLs attempted: self sm

Your MPI job is now going to abort; sorry.
--------------------------------------------------------------------------

Is that because the spawned process is in a different group? They are still all running on the same host, so at least in principle they should be able to communicate with each other via shared memory.

nick



On Fri, Jan 15, 2010 at 16:08, Eugene Loh <Eugene.Loh@sun.com> wrote:
Dunno.  Do lower np values succeed?  If so, at what value of np does the job no longer start?

Perhaps it's having a hard time creating the shared-memory backing file in /tmp.  I think this is a 64-Mbyte file.  If this is the case, try reducing the size of the shared area per this FAQ item:  http://www.open-mpi.org/faq/?category=sm#decrease-sm  Most notably, reduce mpool_sm_min_size below 67108864.

Also note trac ticket 2043, which describes problems with the sm BTL exposed by GCC 4.4.x compilers.  You need to get a sufficiently recent build to solve this.  But, those problems don't occur until you start passing messages, and here you're not even starting up.


Nicolas Bock wrote:
Sorry, I forgot to give more details on what versions I am using:

OpenMPI 1.4
Ubuntu 9.10, kernel 2.6.31-16-generic #53-Ubuntu
gcc (Ubuntu 4.4.1-4ubuntu8) 4.4.1

On Fri, Jan 15, 2010 at 15:47, Nicolas Bock <nicolasbock@gmail.com> wrote:
Hello list,

I am running a job on a 4 quadcore AMD Opteron. This machine has 16 cores, which I can verify by looking at /proc/cpuinfo. However, when I run a job with

mpirun -np 16 -mca btl self,sm job

I get this error:

--------------------------------------------------------------------------
At least one pair of MPI processes are unable to reach each other for
MPI communications.  This means that no Open MPI device has indicated
that it can be used to communicate between these processes.  This is
an error; Open MPI requires that all MPI processes be able to reach
each other.  This error can sometimes be the result of forgetting to
specify the "self" BTL.

  Process 1 ([[56972,2],0]) is on host: rust
  Process 2 ([[56972,1],0]) is on host: rust
  BTLs attempted: self sm

Your MPI job is now going to abort; sorry.
--------------------------------------------------------------------------

By adding the tcp btl I can run the job. I don't understand why openmpi claims that a pair of processes can not reach each other, all processor cores should have access to all memory after all. Do I need to set some other btl limit?

_______________________________________________
users mailing list
users@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users

<main.c><child.c>_______________________________________________
users mailing list
users@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users