Hi Gilles, Thanks for your answer. BR, Radek On Thu, May 14, 2015 at 9:12 AM, Gilles Gouaillardet <gil...@rist.or.jp> wrote:
> This is a known limitation of the sm btl. > > FWIW, the vader btl (available in Open MPI 1.8) has the same limitation, > thought i heard there are some works in progress to get rid of this > limitation. > > Cheers, > > Gilles > > > On 5/14/2015 3:52 PM, Radoslaw Martyniszyn wrote: > > Dear developers of Open MPI, > > I've created two applications: parent and child. Parent spawns children > using MPI_Comm_spawn. I would like to use shared memory when they > communicate. However, applications do not start when I try using sm. Please > comment on that issue. If this feature is not supported, are there any > plans to add support? Also, are there any examples showing MPI_Comm_spawn > and shared memory? > > I am using Open MPI 1.6.5 on Ubuntu. Both applications are run locally on > the same host. > > // Works fine > mpirun --mca btl self,tcp ./parent > > // Application terminates > mpirun --mca btl self,sm ./parent > > "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." > > Below are code snippets: > > parent.cc: > #include <string> > #include <unistd.h> > > int main(int argc, char** argv) { > MPI_Init(NULL, NULL); > > std::string lProgram = "./child"; > MPI_Comm lIntercomm; > int lRv; > lRv = MPI_Comm_spawn( const_cast< char* >(lProgram.c_str()), > MPI_ARGV_NULL, 3, > MPI_INFO_NULL, 0, MPI_COMM_WORLD, &lIntercomm, > MPI_ERRCODES_IGNORE); > > if ( MPI_SUCCESS == lRv) { > std::cout << "SPAWN SUCCESS" << std::endl; > sleep(10); > } > else { > std::cout << "SPAWN ERROR " << lRv << std::endl; > } > > MPI_Finalize(); > } > > child.cc: > #include <mpi.h> > #include <iostream> > #include <unistd.h> > > int main(int argc, char** argv) { > // Initialize the MPI environment > MPI_Init(NULL, NULL); > > std::cout << "CHILD" << std::endl; > sleep(10); > > MPI_Finalize(); > } > > makefile (note, there are tabs not spaces preceding each target): > EXECS=child parent > MPICC?=mpic++ > > all: ${EXECS} > > child: child.cc > ${MPICC} -o child child.cc > > parent: parent.cc > ${MPICC} -o parent parent.cc > > clean: > rm -f ${EXECS} > > > Greetings to all of you, > Radek Martyniszyn > > > > > > _______________________________________________ > users mailing listus...@open-mpi.org > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users > Link to this post: > http://www.open-mpi.org/community/lists/users/2015/05/26865.php > > > > _______________________________________________ > users mailing list > us...@open-mpi.org > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users > Link to this post: > http://www.open-mpi.org/community/lists/users/2015/05/26866.php >