Core vs Thread: quanti thread devo eseguire su questa macchina?


41

Quanti thread devo eseguire su questa macchina?

Il mio lscpudice che ci sono 96 core. Quei nuclei fisici? Qual è il thread massimo e ottimale che posso eseguire su questa macchina?

https://stackoverflow.com/a/10670440/610569 dimostrano che posso eseguire oltre 20 thread per core. Va bene? È ottimale?

alvas@server:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                96
On-line CPU(s) list:   0-95
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4
NUMA node(s):          4
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-4657L v2 @ 2.40GHz
Stepping:              4
CPU MHz:               2700.000
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4801.91
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92
NUMA node1 CPU(s):     1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93
NUMA node2 CPU(s):     2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94
NUMA node3 CPU(s):     3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95

Perdonate la mia noobiness in core / thread.

Risposte:


52

Questo è quello che vuoi sapere

Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4

Hai 4 socket CPU, ogni CPU può avere fino a 12 core e ogni core può avere due thread.

Il numero massimo di thread è, 4 CPU x 12 core x 2 thread per core, quindi 12 x 4 x 2 è 96. Pertanto, il numero massimo di thread è 96 e il numero massimo di core è 48.

Cos'è meglio ?

Dipende da cosa vuoi fare, più thread significa meno frequenza (ovvero un 3ghz si divide in due) ma un migliore multi-tasking (più thread) e l'uso di core completi (senza hyper-threading) è meglio per attività ad alto utilizzo della CPU ( cioè giochi).

Spero che questo ti aiuti.


3
"più thread significa meno frequenza", questa affermazione è molto sbagliata. Anche con l'hyperthreading, un singolo processo può utilizzare completamente il processore. L'hyperthreading può fare uso di pipeline e registri di istruzioni che altrimenti sarebbero inattivi per eseguire alcune esecuzioni da processi / thread diversi in parallelo, aumentando in taluni casi il throughput massimo di un processore. I miglioramenti delle prestazioni sono molto applicativi / di configurazione. Dopo il P4 non ci sono penali di prestazione documentate con HT abilitato (i core di gen P4 hanno avuto alcuni problemi in alcuni casi)
NGRhodes

2
Non vedo questa affermazione come molto sbagliata. Se si eseguono due processi su un singolo core, è disponibile una frequenza inferiore per ciascun processo, rispetto all'esecuzione di ciascun processo sul proprio core. È un'affermazione molto semplice e semplicistica, ma l'OP non ha mai richiesto alcun dettaglio sull'hyper-threading o su come funziona. Sebbene tu abbia ragione, l'hyper-threading ha fatto molta strada e con 48 core sono sicuro che non vorrebbe spegnerlo.
Mark Kirby,

2
@NGRhodes: Intel HT è sufficientemente dettagliato per sovrapporre l'esecuzione fuori ordine tra due thread. Questo è fondamentalmente il punto centrale di HT, per esporre più parallelismo a livello di istruzione al nucleo fuori servizio. (vale a dire mantenere alimentate quelle unità di esecuzione anche mentre un thread si sta riprendendo da un errore del ramo o in attesa di un errore nella cache.) La larghezza di banda del problema del front-end è divisa 50/50 (tranne quando un thread è bloccato), quindi a seconda del tipo di collo di bottiglia in cui viene eseguito il codice, HT potrebbe offrire un throughput quasi doppio o quasi nessun throughput aggiuntivo. (Come il 15% per la codifica video x264).
Peter Cordes,

1
Vedi agner.org/optimize per i dettagli microarchitetturali.
Peter Cordes,

1

Ogni thread core della CPU (thread basato sull'hardware) - uno dei tuoi 96 core può gestire in modo efficiente 16 thread (thread basato su software fe C ++ thread.h) nella maggior parte dei casi a mio parere teorico.


1
dove hai preso "in grado di gestire in modo efficiente 16 thread"? L'uscita dice "Discussione (s) per core: 2"
committedandroider

0

Troverai quanti thread puoi eseguire sul tuo computer eseguendo il comando htop o ps che restituisce il numero di processo sul tuo computer.

Puoi usare la pagina man sul comando 'ps'.

man ps

Se si desidera calcolare il numero di tutti i processi degli utenti, è possibile utilizzare uno di questi comandi:

  1. ps -aux| wc -l
  2. ps -eLf | wc -l

Calcolo del numero di un processo utente:

  1. ps --User root | wc -l

Inoltre, è possibile utilizzare "htop" [Riferimenti] :

Installazione su Ubuntu o Debian:

sudo apt-get install htop

Installazione su Redhat o CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

Se vuoi compilare htop dal codice sorgente, lo troverai qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.