¿Cuál es la diferencia entre multihilo y hyperthreading? [cerrado]

10

He escuchado los términos hyper-threading y multi-threading, pero ¿cuál es exactamente la diferencia entre ellos? ¿Qué tipo de procesador Intel los usa?

Rosa
fuente
2
Estás tratando de comparar cosas que no son directamente comparables; Solo relacionado. Es como preguntar "¿Cuál es la diferencia entre un pie y un zapato?" Aparte de eso, ¿qué ha revelado tu investigación hasta ahora? ¿Dónde exactamente te estás quedando colgado determinando la diferencia en base a definiciones fácilmente obtenidas de Internet?
Ƭᴇcʜιᴇ007
1
No sé ni Multithreading ni Hyperthreading, me piden que los conozca
levantó el
1
los nazis de desbordamiento de pila han cerrado el tema como 'fuera de tema' ... Es una muy buena pregunta, que es popular y no deben ser cerrados ..
Robbo_UK
superuser.com/questions/133082/...
Ciro Santilli冠状病毒审查六四事件法轮功

Respuestas:

19

Multithreading se refiere a la tarea general de ejecutar más de un hilo de ejecución dentro de un sistema operativo. El subprocesamiento múltiple se denomina más genéricamente "multiprocesamiento", que puede incluir múltiples procesos del sistema (un ejemplo simple en Windows sería, por ejemplo, ejecutar Internet Explorer y Microsoft Word al mismo tiempo), o puede consistir en un proceso que tiene múltiples subprocesos dentro eso.

Multithreading (o debería decir, multiprocesamiento) es un concepto de software . Prácticamente cualquier CPU completa de Turing puede realizar subprocesos múltiples, incluso si la computadora solo tiene un núcleo de CPU y ese núcleo no admite hyperthreading. Para admitir el multiprocesamiento, la CPU intercalará la ejecución de diferentes subprocesos de ejecución, ejecutando uno, luego otro, y luego otro, donde el sistema operativo dividirá el tiempo disponible en "segmentos" y dará una cantidad de tiempo aproximadamente igual a cada hilo (el tiempo no tiene que ser igual, pero así es como se hace a menos que un proceso solicite una prioridad más alta).

Tenga en cuenta que, cuando haya más subprocesos de ejecución de software que intentan ejecutarse en un momento dado que haya subprocesos de ejecución de hardware (simultáneos) disponibles , estos subprocesos de software se "intercalarán" entre los núcleos disponibles. En el caso de un "uniprocesador" (un núcleo de CPU sin hyperthreading), si tiene más de un hilo de software, siempreser intercalado Si tiene una CPU de 4 núcleos con hyperthreading, eso es 8 "subprocesos de hardware", lo que significa que la CPU puede ejecutar 8 subprocesos simultáneos de ejecución en el mismo instante, por lo que si tuviera 8 subprocesos de software tratando de ejecutarse, todos podrían ejecutarse a la vez ; pero si tuviera 9 subprocesos de software, uno de los subprocesos de hardware tendría que intercalar un par de subprocesos (el par exacto de subprocesos elegido dependería de la implementación del planificador del sistema operativo).


Hyperthreading, por otro lado, se refiere a una tecnología de hardware muy específica creada por Intel, que permite que un solo núcleo de procesador intercale múltiples hilos de ejecución de manera más eficiente. En otras palabras, una CPU con hyperthreading proporcionará un rendimiento que es algo mayor que una CPU que de otra manera es la misma pero sin hyperthreading, porque la CPU hyperthreaded podrá equilibrar simultáneamente dos (a veces más, pero hyperthreading generalmente es 2- manera) hilos de ejecución en un núcleo dado.

Sin embargo, hyperthreading es estrictamente más lento que tener núcleos físicos completamente separados, porque hay algunos tipos de operaciones que pueden alterar las ventajas de rendimiento de hyperthreading, mientras que hay menos operaciones que pueden causar un evento con núcleos completamente separados.

Tome el siguiente ejemplo, donde se supone que "1 núcleo" realiza exactamente lo mismo en todos los ejemplos:

Ejemplo 1: 2 núcleos, sin hyperthreading.
Ejemplo 2: 4 núcleos, sin hyperthreading.
Ejemplo 3: 2 núcleos con hyperthreading.
Ejemplo 4: 4 núcleos con hyperthreading.

En este caso, el ejemplo 4 siempre será el más rápido. El ejemplo 2 a veces puede ser tan rápido como el ejemplo 4, en cargas de trabajo que son extremadamente inadecuadas para aprovechar las optimizaciones de hyperthreading.

El Ejemplo 3, por otro lado, podría a veces, en cargas de trabajo donde el hipertrachado es más ventajoso, ser casi tan rápido como el Ejemplo 2, aunque tenga la mitad de núcleos físicos.

El Ejemplo 1, por supuesto, será el más lento de todos los ejemplos, pero a veces puede ser tan rápido como el Ejemplo 3, cuando se ejecuta una carga de trabajo poco adecuada para hyperthreading.

En los puntos de referencia del mundo real con las CPU Intel modernas, generalmente encontramos que el hyperthreading produce, en términos muy generales, una mejora del rendimiento del 20% al 40% en comparación con no hyperthreading (con el caso de "no hyperthreading" siendo comparado al deshabilitar la función hyperthreading en el BIOS). Ocasionalmente habrá cargas de trabajo donde la desactivación de hyperthreading muestra una ventaja de rendimiento , pero estas cargas de trabajo pueden ser raras en el uso real. Pero, si tuviera que elegir entre 4 núcleos con hyperthreading u 8 núcleos, suponiendo que cada núcleo tenga el mismo rendimiento, elegiría la CPU de 8 núcleos cada vez.

allquixotic
fuente
2
Para ser exactos, multiproceso y multiprocesamiento no son lo mismo. Los subprocesos comparten el contexto de ejecución con el proceso al que están asociados, mientras que los procesos tienen sus propios contextos de ejecución. Sin embargo, para esta respuesta, esta distinción no es tan importante.
Tero Kilkanen
1
La tecnología Hyperthreading no fue "creada por Intel"; para mainline x86 es solo un nombre de marca registrada para multihilo simultáneo. Si se hubiera producido el Alpha 21464, habría sido uno de los primeros usuarios destacados de SMT. Intel produjo el primer uso lanzado de SMT (posiblemente excluyendo procesadores menos conocidos) con algunos Pentium 4, pero la idea básica no fue una invención de Intel.
Paul A. Clayton
2
Quibble: hyperthreading no es estrictamente más lento que los núcleos separados. Uno puede idear casos (artificiales) en los que compartir cachés L1 es un beneficio mayor que tener uso completo de los recursos de un núcleo. Otro caso peculiar podría ser cuando un hilo está permanentemente activo y otro maneja brevemente eventos intermitentes; despertar un núcleo de forma intermitente es más costoso que despertar un hilo en un núcleo activo. Para subprocesos con ILP extremadamente bajo, si la contención de la memoria caché no es un problema, la mayor eficiencia energética del uso de un solo núcleo podría permitir un mayor impulso (mejor rendimiento).
Paul A. Clayton
3
Las respuestas son editables en SU, así que si quieren mejorarlo, no duden en hacerlo. Además, tenga en cuenta el nivel aparente de conocimiento de la OP; Incluso mi respuesta independiente es probablemente más técnica de lo que esperaban o querían. Intenté pasar por alto algunos detalles a favor de la facilidad de explicación. Dudo si el OP va a diseñar procesadores en el corto plazo y necesita desesperadamente conocer todos estos detalles. Comentarios interesantes, no obstante.
allquixotic
1
Es probable que se rechacen las ediciones sugeridas que cambian el contenido (es decir, no solo las correcciones de gramática / error tipográfico o la reformulación para mayor claridad).
Paul A. Clayton
4

Multithreading es un término para el procesamiento paralelo en el nivel del sistema operativo. El procesador no tiene nada que ver con multihilo.

Hyperthreading es un concepto de Intel que implementa el procesamiento "simultáneo" de múltiples subprocesos en un solo núcleo de procesador. El sistema operativo ve dos núcleos de procesador, aunque solo hay un núcleo físico.

Tero Kilkanen
fuente