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

Reply via email to