multi-CPU, multi-core e hyper-thread


¿Alguien podría recomendarme algunos documentos para ilustrar las diferencias entre multi-CPU, multi-core e hyper-thread? Siempre estoy confundido sobre estas diferencias, y sobre los pros/contras de cada arquitectura en diferentes escenarios.

EDITAR: aquí está mi comprensión actual después de aprender en línea y aprender de los comentarios de los demás; ¿podría alguien comentar por favor?

  1. Creo que hyper-thread es la tecnología más inferior entre ellos, pero barata. Su idea principal es registros duplicados para ahorrar tiempo de cambio de contexto;
  2. multiprocesador es mejor que hyper-thread, pero dado que diferentes CPU están en diferentes chips, la comunicación entre diferentes CPU es de latencia más larga que multi-core, y el uso de múltiples chips, hay más gasto y más consumo de energía que con multi-core;
  3. multi-core integra todas las CPU en un solo chip, por lo que la latencia de la comunicación entre diferentes CPU se reduce en gran medida en comparación con multiprocesador. Dado que utiliza un solo chip para contener todas las CPU, consume menos energía y es menos costoso que un sistema multiprocesador.

Gracias de antemano, George

Author: Warren Dew, 2009-03-25

3 answers

Multi-CPU fue la primera versión: Tendrías una o más placas base con uno o más chips de CPU en ellas. El principal problema aquí era que las CPU tendrían que exponer algunos de sus datos internos a la otra CPU para que no se interpusieran en su camino.

El siguiente paso fue hyper-threading. Un chip en la placa base, pero tenía algunas partes dos veces internamente, por lo que podía ejecutar dos instrucciones al mismo tiempo.

El desarrollo actual es multi-core. Es básicamente el original idea (varias CPU completas) pero en un solo chip. La ventaja: Los diseñadores de chips pueden poner fácilmente los cables adicionales para las señales de sincronización en el chip (en lugar de tener que enrutarlos en un pin, luego sobre la placa base abarrotada y subir a un segundo chip).

Los super ordenadores de hoy en día son multi-cpu, multi-core: Tienen un montón de placas base con por lo general 2-4 CPU en ellos, cada CPU es multi-core y cada uno tiene su propia RAM.

[EDITAR] Tienes eso bastante bien. Solo unos pocos menores puntos:

  • Hyper-threading realiza un seguimiento de dos contextos a la vez en un solo núcleo, exponiendo más paralelismo con el núcleo de CPU fuera de orden. Esto mantiene a las unidades de ejecución alimentadas con trabajo, incluso cuando un subproceso se detiene en un error de caché, una mala interpretación de la rama o la espera de resultados de instrucciones de alta latencia. Es una forma de obtener más rendimiento total sin replicar mucho hardware, pero en todo caso ralentiza cada hilo individualmente. Consulte esta pregunta y Respuesta para obtener más información detalles , y una explicación de lo que estaba mal con la redacción anterior de este párrafo.

  • El principal problema con multi-CPU es que el código que se ejecuta en ellos eventualmente accederá a la RAM. Hay N CPU pero solo un bus para acceder a la RAM. Por lo tanto, debe tener algún hardware que se asegure de que a) cada CPU obtenga una buena cantidad de acceso a la RAM, b) que los accesos a la misma parte de la RAM no causen problemas y c) lo más importante, que la CPU 2 será notificada cuando la CPU 1 escribe en alguna dirección de memoria que la CPU 2 tiene en su caché interna. Si eso no sucede, CPU 2 utilizará felizmente el valor almacenado en caché, ajeno al hecho de que está desactualizado

    Imagínese que tiene tareas en una lista y desea distribuirlas a todas las CPU disponibles. Así que CPU 1 obtendrá el primer elemento de la lista y actualizará los punteros. CPU 2 hará lo mismo. Por razones de eficiencia, ambas CPU no solo copiarán los pocos bytes en la caché, sino toda una " línea de caché "(lo que sea que puede ser). La suposición es que, cuando lees byte X, pronto leerás X+1, también.

    Ahora ambas CPU tienen una copia de la memoria en su caché. CPU 1 obtendrá el siguiente elemento de la lista. Sin la sincronización de caché, no se habrá dado cuenta de que la CPU 2 también ha cambiado la lista, y comenzará a trabajar en el mismo elemento que la CPU 2.

    Esto es lo que efectivamente hace que la multi-CPU sea tan complicada. Los efectos secundarios de esto pueden conducir a un rendimiento que es peor de lo que obtendrías si todo el el código se ejecutó solo en una sola CPU. La solución era multi-core: Puede agregar fácilmente tantos cables como necesite para sincronizar las cachés; incluso podría copiar datos de una caché a otra (actualizando partes de una línea de caché sin tener que vaciarla y recargarla), etc. O la lógica de caché podría asegurarse de que todas las CPU obtengan la misma línea de caché cuando accedan a la misma parte de RAM real, simplemente bloqueando la CPU 2 durante unos pocos nanosegundos hasta que la CPU 1 haya realizado sus cambios.

[EDIT2] La razón principal por la que multi-core es más simple que multi-cpu es que en una placa base, simplemente no puede ejecutar todos los cables entre los dos chips que necesitaría para hacer que la sincronización sea efectiva. Además una señal solo viaja 30cm / ns tops (velocidad de la luz; en un cable, por lo general tiene mucho menos). Y no olvide que, en una placa base multicapa, las señales comienzan a influir entre sí (diafonía). Nos gusta pensar que 0 es 0V y 1 es 5V pero en realidad, " 0 " es algo entre -0.5 V (overdrive al soltar una línea de 1- > 0) y .5V y" 1 " es cualquier cosa por encima de 0.8 V.

Si tienes todo dentro de un solo chip, las señales se ejecutan mucho más rápido y puedes tener tantas como quieras (bueno, casi :). Además, la diafonía de la señal es mucho más fácil de controlar.

 77
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:09

Puede encontrar algunos artículos interesantes sobre CPU dual, multi-core e hiper-threading en El sitio web de Intel o en un breve artículo de Yale University.

Espero que encuentre aquí toda la información que necesita.

 4
Author: Bogdan Constantinescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-25 08:46:51

En pocas palabras: el sistema multi-CPU o multi-procesador tiene varios procesadores. Un sistema multi-core es un sistema multi-procesador con varios procesadores en el mismo dado. En hyperthreading, varios subprocesos pueden ejecutarse en el mismo procesador (es decir, el tiempo de cambio de contexto entre estos subprocesos múltiples es muy pequeño).

Los multiprocesadores han estado allí durante 30 años, pero principalmente en laboratorios. Multi-core es el nuevo multi-procesador popular. Los procesadores de servidor hoy en día implementan hyperthreading junto con multi-procesadores.

Los artículos de wikipedia sobre estos temas son bastante ilustrativos.

 2
Author: amit_grepclub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-26 16:36:35