It was just that when I started using map-by I didn't get why:
ppr:2
but
PE=2
I would at least have expected:
ppr=2:PE=2
or
ppr:2:PE:2
?
Does this have a reason?

2016-01-06 21:54 GMT+01:00 Ralph Castain <r...@open-mpi.org>:

> <LOL> ah yes, “r” = “resource”!! Thanks for the reminder :-)
>
> The difference in delimiter is just to simplify parsing - we can “split”
> the string on colons to separate out the options, and then use “=“ to set
> the value. Nothing particularly significant about the choice.
>
>
> On Jan 6, 2016, at 12:48 PM, Nick Papior <nickpap...@gmail.com> wrote:
>
> Your are correct. "socket" means that the resource is socket, "ppr:2"
> means 2 processes per resource.
> PE=<n> is Processing Elements per process.
>
> Perhaps the dev's can shed some light on why PE uses "=" and ppr has ":"
> as delimiter for resource request?
>
> This "old" slide show from Jeff shows the usage (although the input have
> changed since 1.7):
>
> http://www.slideshare.net/jsquyres/open-mpi-explorations-in-process-affinity-eurompi13-presentation
>
>
> 2016-01-06 21:33 GMT+01:00 Matt Thompson <fort...@gmail.com>:
>
>> A ha! The Gurus know all. The map-by was the magic sauce:
>>
>> (1176) $ env OMP_NUM_THREADS=7 KMP_AFFINITY=compact mpirun -np 4 -map-by
>> ppr:2:socket:pe=7 ./hello-hybrid.x | sort -g -k 18
>> Hello from thread 0 out of 7 from process 0 out of 4 on borgo035 on CPU 0
>> Hello from thread 1 out of 7 from process 0 out of 4 on borgo035 on CPU 1
>> Hello from thread 2 out of 7 from process 0 out of 4 on borgo035 on CPU 2
>> Hello from thread 3 out of 7 from process 0 out of 4 on borgo035 on CPU 3
>> Hello from thread 4 out of 7 from process 0 out of 4 on borgo035 on CPU 4
>> Hello from thread 5 out of 7 from process 0 out of 4 on borgo035 on CPU 5
>> Hello from thread 6 out of 7 from process 0 out of 4 on borgo035 on CPU 6
>> Hello from thread 0 out of 7 from process 1 out of 4 on borgo035 on CPU 7
>> Hello from thread 1 out of 7 from process 1 out of 4 on borgo035 on CPU 8
>> Hello from thread 2 out of 7 from process 1 out of 4 on borgo035 on CPU 9
>> Hello from thread 3 out of 7 from process 1 out of 4 on borgo035 on CPU 10
>> Hello from thread 4 out of 7 from process 1 out of 4 on borgo035 on CPU 11
>> Hello from thread 5 out of 7 from process 1 out of 4 on borgo035 on CPU 12
>> Hello from thread 6 out of 7 from process 1 out of 4 on borgo035 on CPU 13
>> Hello from thread 0 out of 7 from process 2 out of 4 on borgo035 on CPU 14
>> Hello from thread 1 out of 7 from process 2 out of 4 on borgo035 on CPU 15
>> Hello from thread 2 out of 7 from process 2 out of 4 on borgo035 on CPU 16
>> Hello from thread 3 out of 7 from process 2 out of 4 on borgo035 on CPU 17
>> Hello from thread 4 out of 7 from process 2 out of 4 on borgo035 on CPU 18
>> Hello from thread 5 out of 7 from process 2 out of 4 on borgo035 on CPU 19
>> Hello from thread 6 out of 7 from process 2 out of 4 on borgo035 on CPU 20
>> Hello from thread 0 out of 7 from process 3 out of 4 on borgo035 on CPU 21
>> Hello from thread 1 out of 7 from process 3 out of 4 on borgo035 on CPU 22
>> Hello from thread 2 out of 7 from process 3 out of 4 on borgo035 on CPU 23
>> Hello from thread 3 out of 7 from process 3 out of 4 on borgo035 on CPU 24
>> Hello from thread 4 out of 7 from process 3 out of 4 on borgo035 on CPU 25
>> Hello from thread 5 out of 7 from process 3 out of 4 on borgo035 on CPU 26
>> Hello from thread 6 out of 7 from process 3 out of 4 on borgo035 on CPU 27
>>
>> So, a question: what does "ppr" mean? The man page seems to accept it as
>> an axiom of Open MPI:
>>
>>        --map-by <foo>
>>               Map  to  the specified object, defaults to socket.
>> Supported options include slot, hwthread, core, L1cache, L2cache, L3cache,
>> socket, numa,
>>               board, node, sequential, distance, and ppr. Any object can
>> include modifiers by adding a : and any combination of PE=n (bind  n
>>  processing
>>               elements  to  each  proc), SPAN (load balance the processes
>> across the allocation), OVERSUBSCRIBE (allow more processes on a node than
>> pro‐
>>               cessing elements), and NOOVERSUBSCRIBE.  This includes PPR,
>> where the pattern would be terminated by another colon to separate it from
>>  the
>>               modifiers.
>>
>> Is it an acronym/initialism? From some experimenting it seems to be
>> ppr:2:socket means 2 processes per socket? And pe=7 means leave 7 processes
>> between them? Is that about right?
>>
>> Matt
>>
>> On Wed, Jan 6, 2016 at 3:19 PM, Ralph Castain <r...@open-mpi.org> wrote:
>>
>>> I believe he wants two procs/socket, so you’d need ppr:2:socket:pe=7
>>>
>>>
>>> On Jan 6, 2016, at 12:14 PM, Nick Papior <nickpap...@gmail.com> wrote:
>>>
>>> I do not think KMP_AFFINITY should affect anything in OpenMPI, it is an
>>> MKL env setting? Or am I wrong?
>>>
>>> Note that these are used in an environment where openmpi automatically
>>> gets the host-file. Hence they are not present.
>>> With intel mkl and openmpi I got the best performance using these,
>>> rather long flags:
>>>
>>> export KMP_AFFINITY=verbose,compact,granularity=core
>>> export KMP_STACKSIZE=62M
>>> export KMP_SETTINGS=1
>>>
>>> def_flags="--bind-to core -x OMP_PROC_BIND=true --report-bindings"
>>> def_flags="$def_flags -x KMP_AFFINITY=$KMP_AFFINITY"
>>>
>>> # in your case 7:
>>> ONP=7
>>> flags="$def_flags -x MKL_NUM_THREADS=$ONP -x MKL_DYNAMIC=FALSE"
>>> flags="$flags -x OMP_NUM_THREADS=$ONP -x OMP_DYNAMIC=FALSE"
>>> flags="$flags -x KMP_STACKSIZE=$KMP_STACKSIZE"
>>> flags="$flags --map-by ppr:1:socket:pe=7"
>>>
>>> then run your program:
>>>
>>> mpirun $flags <app>
>>>
>>> A lot of the option flags are duplicated (and strictly not needed), but
>>> I provide them for easy testing changes.
>>> Surely this is application dependent, but for my case it was performing
>>> really well.
>>>
>>>
>>> 2016-01-06 20:48 GMT+01:00 Erik Schnetter <schnet...@gmail.com>:
>>>
>>>> Setting KMP_AFFINITY will probably override anything that OpenMPI
>>>> sets. Can you try without?
>>>>
>>>> -erik
>>>>
>>>> On Wed, Jan 6, 2016 at 2:46 PM, Matt Thompson <fort...@gmail.com>
>>>> wrote:
>>>> > Hello Open MPI Gurus,
>>>> >
>>>> > As I explore MPI-OpenMP hybrid codes, I'm trying to figure out how to
>>>> do
>>>> > things to get the same behavior in various stacks. For example, I
>>>> have a
>>>> > 28-core node (2 14-core Haswells), and I'd like to run 4 MPI
>>>> processes and 7
>>>> > OpenMP threads. Thus, I'd like the processes to be 2 processes per
>>>> socket
>>>> > with the OpenMP threads laid out on them. Using a "hybrid Hello World"
>>>> > program, I can achieve this with Intel MPI (after a lot of testing):
>>>> >
>>>> > (1097) $ env OMP_NUM_THREADS=7 KMP_AFFINITY=compact mpirun -np 4
>>>> > ./hello-hybrid.x | sort -g -k 18
>>>> > srun.slurm: cluster configuration lacks support for cpu binding
>>>> > Hello from thread 0 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 0
>>>> > Hello from thread 1 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 1
>>>> > Hello from thread 2 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 2
>>>> > Hello from thread 3 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 3
>>>> > Hello from thread 4 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 4
>>>> > Hello from thread 5 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 5
>>>> > Hello from thread 6 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 6
>>>> > Hello from thread 0 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 7
>>>> > Hello from thread 1 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 8
>>>> > Hello from thread 2 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 9
>>>> > Hello from thread 3 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 10
>>>> > Hello from thread 4 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 11
>>>> > Hello from thread 5 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 12
>>>> > Hello from thread 6 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 13
>>>> > Hello from thread 0 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 14
>>>> > Hello from thread 1 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 15
>>>> > Hello from thread 2 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 16
>>>> > Hello from thread 3 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 17
>>>> > Hello from thread 4 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 18
>>>> > Hello from thread 5 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 19
>>>> > Hello from thread 6 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 20
>>>> > Hello from thread 0 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 21
>>>> > Hello from thread 1 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 22
>>>> > Hello from thread 2 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 23
>>>> > Hello from thread 3 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 24
>>>> > Hello from thread 4 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 25
>>>> > Hello from thread 5 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 26
>>>> > Hello from thread 6 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 27
>>>> >
>>>> > Other than the odd fact that Process #0 seemed to start on Socket #1
>>>> (this
>>>> > might be an artifact of how I'm trying to detect the CPU I'm on),
>>>> this looks
>>>> > reasonable. 14 threads on each socket and each process is laying out
>>>> its
>>>> > threads in a nice orderly fashion.
>>>> >
>>>> > I'm trying to figure out how to do this with Open MPI (version
>>>> 1.10.0) and
>>>> > apparently I am just not quite good enough to figure it out. The
>>>> closest
>>>> > I've gotten is:
>>>> >
>>>> > (1155) $ env OMP_NUM_THREADS=7 KMP_AFFINITY=compact mpirun -np 4
>>>> -map-by
>>>> > ppr:2:socket ./hello-hybrid.x | sort -g -k 18
>>>> > Hello from thread 0 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 0
>>>> > Hello from thread 0 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 0
>>>> > Hello from thread 1 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 1
>>>> > Hello from thread 1 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 1
>>>> > Hello from thread 2 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 2
>>>> > Hello from thread 2 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 2
>>>> > Hello from thread 3 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 3
>>>> > Hello from thread 3 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 3
>>>> > Hello from thread 4 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 4
>>>> > Hello from thread 4 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 4
>>>> > Hello from thread 5 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 5
>>>> > Hello from thread 5 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 5
>>>> > Hello from thread 6 out of 7 from process 0 out of 4 on borgo035 on
>>>> CPU 6
>>>> > Hello from thread 6 out of 7 from process 1 out of 4 on borgo035 on
>>>> CPU 6
>>>> > Hello from thread 0 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 14
>>>> > Hello from thread 0 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 14
>>>> > Hello from thread 1 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 15
>>>> > Hello from thread 1 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 15
>>>> > Hello from thread 2 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 16
>>>> > Hello from thread 2 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 16
>>>> > Hello from thread 3 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 17
>>>> > Hello from thread 3 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 17
>>>> > Hello from thread 4 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 18
>>>> > Hello from thread 4 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 18
>>>> > Hello from thread 5 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 19
>>>> > Hello from thread 5 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 19
>>>> > Hello from thread 6 out of 7 from process 2 out of 4 on borgo035 on
>>>> CPU 20
>>>> > Hello from thread 6 out of 7 from process 3 out of 4 on borgo035 on
>>>> CPU 20
>>>> >
>>>> > Obviously not right. Any ideas on how to help me learn? The man
>>>> mpirun page
>>>> > is a bit formidable in the pinning part, so maybe I've missed an
>>>> obvious
>>>> > answer.
>>>> >
>>>> > Matt
>>>> > --
>>>> > Matt Thompson
>>>> >
>>>> > Man Among Men
>>>> > Fulcrum of History
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > users mailing list
>>>> > 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/01/28217.php
>>>>
>>>>
>>>>
>>>> --
>>>> Erik Schnetter <schnet...@gmail.com>
>>>> http://www.perimeterinstitute.ca/personal/eschnetter/
>>>> _______________________________________________
>>>> users mailing list
>>>> 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/01/28218.php
>>>>
>>>
>>>
>>>
>>> --
>>> Kind regards Nick
>>> _______________________________________________
>>> users mailing list
>>> 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/01/28219.php
>>>
>>>
>>>
>>> _______________________________________________
>>> users mailing list
>>> 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/01/28221.php
>>>
>>
>>
>>
>> --
>> Matt Thompson
>>
>> Man Among Men
>> Fulcrum of History
>>
>>
>> _______________________________________________
>> users mailing list
>> 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/01/28223.php
>>
>
>
>
> --
> Kind regards Nick
> _______________________________________________
> users mailing list
> 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/01/28224.php
>
>
>
> _______________________________________________
> users mailing list
> 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/01/28226.php
>



-- 
Kind regards Nick

Reply via email to