On Feb 13, 2011, at 4:07 AM, Brice Goglin wrote:

>> $ mpirun -np 4 hwloc-bind socket:0.core:0-3 ./test
>> 
>> 1. Does hwloc-bind map the processes *sequentially* on *successive* cores of 
>> the socket?
> 
> No. Each hwloc-bind command in the mpirun above doesn't know that there are 
> other hwloc-bind instances on the same machine. All of them bind their 
> process to all cores in the first socket.

To further underscore this point, mpirun launched 4 copies of:

    hwloc-bind socket:0.core:0-3 ./test

Which means that all 4 processes bound to exactly the same thing.

If you want each process to bind to a *different* set of PU's, then you have 
two choices:

1. See Open MPI 1.5.1's mpirun(1) man page.  There's new affinity options in 
the OMPI 1.5 series, such as --bind-to-core and --bind-to-socket.  We wrote 
them up in the FAQ, too.

2. Write a wrapper script that looks at the Open MPI environment variables 
OMPI_COMM_WORLD_RANK, or OMPI_COMM_WORLD_LOCAL_RANK, or 
OMPI_COMM_WORLD_NODE_RANK and decides how to invoke hwloc-bind.  For example, 
something like this:

    mpirun -np 4 my_wrapper.sh ./test

where my_wrapper.sh is:

-----
#!/bin/sh

if test "$OMPI_COMM_WORLD_RANK" = "0"; then
    bind_string=...whatever...
else
    bind_string=...whatever...
fi
hwloc-bind $bind_string $*
-----

Something like that.

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to