Gilles,

Yep, that is what I am doing. I have the child processes wait for a message 
from the master before doing anything.
Now I have to find a creative way to determine which processes to scale back as 
I allocate the work. I was just using modulo on the line number from the input, 
but if my divisor changes, it can cause race conditions I don't want.

Thanks for the feedback from both of you.

Brian Andrus

From: users [mailto:users-boun...@open-mpi.org] On Behalf Of Gilles Gouaillardet
Sent: Thursday, March 17, 2016 4:59 PM
To: Open MPI Users
Subject: Re: [OMPI users] Dynamically throttle/scale processes

Brian,

unlike Ralph, i will assume all your processes are MPI tasks.

at first glance, the MPI philosophy is the other way around :
start with mpirun -np 1 traffic_cop, and then MPI_Comm_spawn("child") when you 
need more workers.

that being said, if you are fine with having idle children (e.g. children that 
consume no CPU resources, but do keep memory, network and other system 
resources allocated), then you can start 256 mpi tasks, either with
mpirun -np 256 cop_children
or
mpirun -np 1 traffic_cop : -np 255 children
/*i am not 100% sure about the syntax here ... */

there is no MPI way to signal a task, but you can have your children wait for a 
message from the master.
unless you are using a TCP interconnect, i do no think OpenMPI is production 
ready for MPI_THREAD_MULTIPLE,
so one option is to have your children MPI_Recv() information from the traffic 
cop in the main process, and do the real job is an other pthread (so the main 
process can kill the working thread when MPI_Recv returns)
an other option is to MPI_Irecv(), do the job and periodically MPI_Test() to 
check if there is any order from the traffic cop.

Cheers,

Gilles
On 3/18/2016 8:38 AM, Ralph Castain wrote:
Hmmm....I haven't heard of that specific use-case, but I have seen some similar 
things. Did you want the processes to be paused, or killed, when you scale 
down? Obviously, I'm assuming they are not MPI procs, yes?

I can certainly see a way to make mpirun do it without too much fuss, though it 
would require a message as opposed to a signal so you can indicate how many 
procs to "idle/kill".


On Mar 17, 2016, at 3:22 PM, Andrus, Brian Contractor 
<bdand...@nps.edu<mailto:bdand...@nps.edu>> wrote:

All,

I have an mpi-based program that has a master process that acts as a 'traffic 
cop' in that it hands out work to child processes.

I want to be able to dynamically throttle how many child processes are in use 
at any given time.

For instance, if I start it with "mpirun -n 512" I could send a signal to tell 
it to only use 256 of them for a bit and then tell it to scale back up. The 
upper limit being the number of processes mpirun was launched with.


Has anyone done anything like this? Maybe a better way to do it?
Basically my program is crunching through a large text file, examining each 
line for various things.

Thanks in advance for any insight,

Brian Andrus

_______________________________________________
users mailing list
us...@open-mpi.org<mailto: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/2016/03/28744.php





_______________________________________________

users mailing list

us...@open-mpi.org<mailto: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/2016/03/28745.php

Reply via email to