Pregunta

Tengo un programa multiproceso que se ejecuta en un Intel I7 de cuatro núcleos.Cuando ejecuto Runtime.getRuntime.availableProcessors(), obtengo 8, y sé que HyperThreading está disponible en esta CPU.

Sin embargo, cuando creo hilos, mis niveles de CPU son al 100% (es decir, no cero) para 4 hilos, lo que significa que 4 hilos no se utilizan.¿Hay alguna manera de habilitar el hiperthreading en Java?

¿Fue útil?

Solución

HyperThreading está habilitado por el hecho de que todos los JVM modernos usan hilos nativos, por lo que esta es una configuración de configuración de OS / CPU.

Sin embargo, HyperThreading no le da núcleos adicionales, permite que el tiempo de tiempo de grano fino de los cuatro CPU tiene. Es decir, mientras que un hilo se estanca, digamos esperando que se vuela una página de memoria en el caché, se puede derribar otro hilo y hacer uso de partes de la CPU. Agrega aproximadamente el 10% adicional al tamaño de un núcleo de CPU debido a requisitos de programación más complejos y no beneficia a todas las aplicaciones.

Si tiene el máximo las cuatro CPU con cuatro hilos, entonces eso es posible con HyperThreading activado o desactivado. Simplemente significa que esos hilos se están calientes, sin bloquear mucho.

La razón por la que Java informa una CPU de 8 núcleos, en lugar de 4 es porque el sistema operativo le dice a Java que la CPU tiene 8 núcleos. El sistema operativo cree que debido a que se le ha dicho al sistema operativo que programe hilos como si fuera una CPU de 8 núcleos, esto hizo que la adición de soporte de hiperthreading a los OSE sean mucho más simples. El sistema operativo lleva a administrar hilos como antes, ajeno a gran parte del funcionamiento interno de hiperthreading y permite que la CPU administre la programación de bajo nivel del conjunto y cuando las partes de la CPU estén disponibles.

Una discusión más detallada, con los puntos de referencia se puede leer aquí < / p>

Otros consejos

Utilice el siguiente comando

$ lscpu

La salida se puede usar para determinar el número real de núcleos y si tiene HyperThreading habilitado o no.

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45
Stepping:              7
CPU MHz:               2399.995
BogoMIPS:              4799.35
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31

El paralelismo real que se puede lograr será (No. de enchufes) x (núcleos por zócalo) x (hilos por núcleo).Para determinar si su procesador está hiperthreaded o no puede usar los hilos por parámetro principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top