Thanks for your kind help so far.

Following your suggestions I've been trying to figure out MPI_COMM_SPAWN, but 
it's at the edge of my understanding so it's not easy.

I read that the changing of directories can be achieved using info keys, 
however these are very cryptic: I can't seem to find any precise information 
anywhere about how to use them. I tried the following: 

-------------------------------------
WRITE(crank,'(I1)') irank
dir="test-" // crank

CALL SYSTEM("mkdir " // dir)

CALL MPI_COMM_SPAWN("mpitest-2.ex",MPI_ARGV_NULL,1,"wdir ./" // 
dir,irank,MPI_COMM_SELF,ierr)
---------------------------------------

MPI_ARGV_NULL: there are no arguments to mpitest-2.ex

1: I want to spawn 1 process per original process (the original process sitting 
idle, maybe waiting for a return parameter from its child - have not figured 
out how to achieve communication between the two processes yet, but that's the 
next step)

"wdir ./test-1" (for example): the directory in which the new process should 
run. I don't think this is correct, but as I say, I can't find precise 
information about the info keys (at least, in a way that I can understand it) - 
can anyone help me here?

irank: the current rank of the process, so every process spawns its own process

MPI_COMM_SELF: I assume this is the new name for the child processes, like 
MPI_COMM_WORLD.

ierr: error value

So it compiles, but crashes once I reach the spawn command.

Can you help?
Thank you very much.

> From: jsquy...@cisco.com
> Date: Fri, 5 Mar 2010 15:02:57 -0500
> To: us...@open-mpi.org
> Subject: Re: [OMPI users] running externalprogram     on      same    
> processor       (Fortran)
> 
> On Mar 5, 2010, at 2:38 PM, Ralph Castain wrote:
> 
> >> CALL SYSTEM("cd " // TRIM(dir) // " ; mpirun -machinefile ./machinefile 
> >> -np 1 /home01/group/Execute/DLPOLY.X > job.out 2> job.err ; cd - > 
> >> /dev/null")
> > 
> > That is guaranteed not to work. The problem is that mpirun sets 
> > environmental variables for the original launch. Your system call carries 
> > over those envars, causing mpirun to become confused.
> 
> You should be able to use MPI_COMM_SPAWN to launch this MPI job.  Check the 
> man page for MPI_COMM_SPANW; I believe we have info keys to specify things 
> like what hosts to launch on, etc.
> 
> >> Do you think MPI_COMM_SPAWN can help?
> > 
> > It's the only method supported by the MPI standard. If you need it to block 
> > until this new executable completes, you could use a barrier or other MPI 
> > method to determine it.
> 
> I believe that the user said they wanted to use the same cores as their 
> original MPI job occupies for the new job -- they basically want the old job 
> to block until the new job completes.  Keep in mind that OMPI busy-polls 
> waiting for progress, so you might actually get hosed here (two procs 
> competing for time on the same core).
> 
> I'm not immediately thinking of a good way to avoid this issue -- perhaps you 
> could kludge something up such that the parent job polls on sleep() and 
> checking to see if a message has arrived from the child (i.e., the last thing 
> the child does before it calls MPI_FINALIZE is to send a message to its 
> parents and then MPI_COMM_DISCONNECT from its parents).  If the parent finds 
> that it has a message from the child(ren), it can MPI_COMM_DISCONNECT and 
> continue processing.
> 
> Kinda hackey, but it might work...?
> 
> -- 
> Jeff Squyres
> jsquy...@cisco.com
> For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
> 
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users
                                          
_________________________________________________________________
Tell us your greatest, weirdest and funniest Hotmail stories
http://clk.atdmt.com/UKM/go/195013117/direct/01/

Reply via email to