Núcleos vs hilos: ¿cuántos hilos debería ejecutar en esta máquina?

41

¿Cuántos hilos debo ejecutar en esta máquina?

Mi lscpudice que hay 96 núcleos. ¿Son esos núcleos físicos? ¿Cuál es el hilo máximo y óptimo que puedo ejecutar en esta máquina?

https://stackoverflow.com/a/10670440/610569 muestra que puedo ejecutar más de 20 hilos por núcleo. Esta bien? ¿Eso es óptimo?

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

Disculpe mi novato en núcleos / hilos.

alvas
fuente

Respuestas:

52

Esto es lo que quieres saber

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

Tiene 4 zócalos de CPU, cada CPU puede tener hasta 12 núcleos y cada núcleo puede tener dos hilos.

Su número máximo de hilos es de 4 CPU x 12 núcleos x 2 hilos por núcleo, por lo que 12 x 4 x 2 es 96. Por lo tanto, el número máximo de hilos es 96 y el número máximo de núcleos es 48.

Qué es mejor ?

Eso depende de lo que desee hacer, más subprocesos significa menos frecuencia (es decir, un 3ghz se divide en dos) pero una mejor multitarea (más subprocesos) y el uso de núcleos completos (sin hiperprocesamiento) es mejor para tareas de alto uso de CPU ( es decir, juegos).

Espero que esto te ayude.

Mark Kirby
fuente
3
"más hilos significa menos frecuencia", esta afirmación es muy incorrecta. Incluso con hyperthreading, un único proceso solitario puede hacer un uso completo del procesador. Hyperthreading puede hacer uso de canales y registros de instrucciones que de otro modo estarían inactivos para realizar algunas ejecuciones de diferentes procesos / subprocesos en paralelo, lo que aumenta el rendimiento máximo de un procesador en ciertos casos. Las ganancias de rendimiento son muy de aplicación / configuración. Después del P4 no hay penalizaciones de rendimiento documentadas con HT habilitado (los núcleos de gen P4 tuvieron algunos problemas en ciertos casos)
NGRhodes
2
No veo esta declaración como muy incorrecta. Si ejecuta dos procesos en un solo núcleo, hay menos frecuencia disponible para cada proceso, en comparación con la ejecución de cada proceso en su propio núcleo. Es una declaración muy básica y simplista, pero el OP nunca solicitó ningún detalle sobre el hiperprocesamiento o cómo funciona. Aunque tiene razón, el hiperprocesamiento ha recorrido un largo camino y con 48 núcleos estoy seguro de que no querrían desactivarlo.
Mark Kirby
2
@NGRhodes: Intel HT es lo suficientemente fino como para superponer la ejecución fuera de orden entre dos subprocesos. Este es básicamente el objetivo de HT, exponer más paralelismo a nivel de instrucción al núcleo fuera de orden. (es decir, mantener esas unidades de ejecución alimentadas incluso mientras un subproceso se está recuperando de una rama de predicción errónea o esperando una falla de caché). el cuello de botella con el que se encuentra su código, HT podría proporcionarle casi el doble de rendimiento, o casi ningún rendimiento adicional. (Como 15% para codificación de video x264.)
Peter Cordes
1
Ver agner.org/optimize para los detalles de la microarquitectura.
Peter Cordes el
1

Cada subproceso de núcleo de CPU (subproceso basado en hardware): uno de sus 96 núcleos puede manejar eficientemente 16 subprocesos (subproceso basado en software fe C ++ thread.h) en la mayoría de los casos en mi opinión teórica.

Piotr Lenarczyk
fuente
1
¿De dónde sacaste "eficientemente puede manejar 16 hilos"? La salida dice "Hilo (s) por núcleo: 2"
committedandroider
0

Encontrará cuántos subprocesos puede ejecutar en su máquina ejecutando el comando htop o ps que devuelve el número de procesos en su máquina.

Puede usar la página de manual sobre el comando 'ps'.

man ps

Si desea calcular el número de procesos de todos los usuarios, puede usar uno de estos comandos:

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

Número de cálculo de un proceso de usuario:

  1. ps --User root | wc -l

Además, puede usar "htop" [Referencia] :

Instalación en Ubuntu o Debian:

sudo apt-get install htop

Instalación en Redhat o CentOS:

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

Si desea compilar htop desde el código fuente, lo encontrará aquí .

Saeed Zahedian Abroodi
fuente