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