ppr
significa processi per risorsa. La sua sintassi è ppr:N:resource
e significa "assegnare i processi N a ciascuna risorsa di tipo risorsa disponibile sull'host". Ad esempio, in un sistema a 4 socket con CPU 6 core aventi --map-by ppr:4:socket
risultati nel seguente mappa del processo:
socket ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ----
core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
process A B C D E F G H I J K L M N O P
(numerazione processo va da A
a Z
in questo esempio)
Nei i mezzi manuali è che l'intero ppr:N:resource
deve essere considerato come un singolo specificatore e che le opzioni potrebbero essere aggiunte dopo di esso, separate da :
, ad esempio ppr:2:socket:pe=2
. Questo va letta come "iniziare due processi per ogni presa di corrente e si legano ciascuno di loro di due elementi di elaborazione" e dovrebbe comportare la seguente mappa dato lo stesso sistema quad-socket:
socket ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ----
core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
process A A B B C C D D E E F F G G H H
Il sequential
mapper legge il file host linea per linea e avvia un processo per host trovato lì. Ignora il numero di slot, se indicato.
Il programma di mappatura dist
elabora i nodi NUMA in base alla distanza di quest'ultimo da una determinata risorsa PCI. Ha senso solo sui sistemi NUMA. Nuovamente, usiamo il sistema quad-socket giocattolo, ma questa volta estendere la rappresentazione in modo da mostrare la topologia NUMA:
Socket 0 ------------- Socket 1
| |
| |
| |
| |
| |
Socket 2 ------------- Socket 3
|
ib0
I confini tra le prese rappresentano collegamenti CPU. Questi sono, ad es. Collegamenti QPI per CPU Intel e collegamenti HT per CPU AMD. ib0
è un HCA InfiniBand utilizzato per comunicare con altri nodi di calcolo. Ora, in quel sistema, Socket 2 parla direttamente con InfiniBand HCA. Socket 0 e Socket 3 devono attraversare un collegamento CPU per parlare con ib0
e Socket 1 deve attraversare 2 collegamenti CPU.Ciò significa che i processi in esecuzione su Socket 2 avranno la latenza più bassa possibile durante l'invio e la ricezione di messaggi e processi sul socket 1 avranno la massima latenza possibile.
Come funziona? Ad esempio, se il tuo file host lo specifica 16 slot su tale host e la funzione di mappatura è --map-by dist:ib0
, può comportare la seguente mappa:
socket ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ----
core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
process G H I J K L A B C D E F M N O P
6 processi sono mappati alla presa 2 che è più vicino al HCA InfiniBand, poi altri 6 sono mappati alla presa 0 questo è il secondo più vicino e altri 4 sono mappati su Socket 3. È anche possibile distribuire i processi anziché riempire linearmente gli elementi di elaborazione. --map-by dist:ib0:span
risultati in:
socket ---- 0 ---- ---- 1 ---- ---- 2 ---- ---- 3 ----
core 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
process E F G H M N O P A B C D I J K L
La topologia NUMA reale si ottiene utilizzando la libreria hwloc
, che legge le informazioni sulla distanza fornite dal BIOS. hwloc
include uno strumento da riga di comando denominato hwloc-ls
(noto anche come lstopo
) che potrebbe essere utilizzato per visualizzare la topologia del sistema. Normalmente include solo la topologia degli elementi di elaborazione e i domini NUMA nel suo output, ma se gli dai l'opzione -v
include anche i dispositivi PCI.
Davvero utile, ty. –