I don't know (I'm a little new to this area), but I figured out how to get around the problem:

Using SGE and MVAPICH2, the "-env MV2_CPU_MAPPING 0:1....." option in mpiexec seems to do the trick.

So when calling the external program with mpiexec, I map the called process to the current core rank, and it seems to stay distributed and separated as I want.

Hope someone else finds this useful in the future.

> Date: Wed, 3 Mar 2010 13:13:01 +1100
> Subject: Re: [OMPI users] running external program on same processor (Fortran)
>
> Surely this is the problem of the scheduler that your system uses,
> rather than MPI?
>
>
> On Wed, 2010-03-03 at 00:48 +0000, abc def wrote:
> > Hello,
> >
> > I wonder if someone can help.
> >
> > The situation is that I have an MPI-parallel fortran program. I run it
> > and it's distributed on N cores, and each of these processes must call
> > an external program.
> >
> > This external program is also an MPI program, however I want to run it
> > in serial, on the core that is calling it, as if it were part of the
> > fortran program. The fortran program waits until the external program
> > has completed, and then continues.
> >
> > The problem is that this external program seems to run on any core,
> > and not necessarily the (now idle) core that called it. This slows
> > things down a lot as you get one core doing multiple tasks.
> >
> > Can anyone tell me how I can call the program and ensure it runs only
> > on the core that's calling it? Note that there are several cores per
> > node. I can ID the node by running the hostname command (I don't know
> > a way to do this for individual cores).
> >
> > Thanks!
> >
> > ====
> >
> > Extra information that might be helpful:
> >
> > If I simply run the external program from the command line (ie, type
> > "/path/myprogram.ex <enter>"), it runs fine. If I run it within the
> > fortran program by calling it via
> >
> > CALL SYSTEM("/path/myprogram.ex")
> >
> > it doesn't run at all (doesn't even start) and everything crashes. I
> > don't know why this is.
> >
> > If I call it using mpiexec:
> >
> > CALL SYSTEM("mpiexec -n 1 /path/myprogram.ex")
> >
> > then it does work, but I get the problem that it can go on any core.
> >
> > ______________________________________________________________________
> > Do you want a Hotmail account? Sign-up now - Free
> > _______________________________________________
> > users mailing list
> > users@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> _______________________________________________
> users mailing list
> users@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


Not got a Hotmail account? Sign-up now - Free