2009-03-25 12 views
64

¿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.multi-CPU, multi-core e hiper-thread

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

  1. Creo que hyper-thread es la tecnología más baja entre ellos, pero es barata. Su idea principal es duplicar los registros para ahorrar tiempo de cambio de contexto;
  2. El multiprocesador es mejor que el subproceso, pero dado que diferentes CPU se encuentran en chips diferentes, la comunicación entre diferentes CPU es de latencia más larga que multinúcleo, y al usar chips múltiples, hay más gasto y más consumo de energía que con multi-núcleo;
  3. multi-core integra todas las CPU en un solo chip, por lo que la latencia de la comunicación entre las diferentes CPU se reduce considerablemente en comparación con el procesador múltiple. Como usa un único chip para contener todas las CPU, consume menos energía y es menos costoso que un sistema de múltiples procesadores.

gracias de antemano, George

+0

Hyperthreading no es inferior. Es bastante útil, especialmente para servidores. Hay rendimientos decrecientes de ILP (manteniendo el procesador ocupado reorganizando las instrucciones secuenciales). Hyperthreading es una alternativa para impulsar el paralelismo: múltiples hilos de hardware se ejecutan sin demasiada sobrecarga. –

+0

¿Qué hay de mis otros puntos acerca de multi-core y multiprocesador? ¿Crees que mis puntos son correctos? ¿Nada malo? – George2

+1

@ George2 - Tu edición es muy cierta. Esa es la idea completa. :) Lo mejor que puedes obtener en un servidor es, probablemente, un multi-core multi-CPU, pero para el uso habitual multi-core es la mejor opción. –

Respuesta

77

multi-CPU fue la primera versión: Usted tendría una o más placas madre con uno o más chips de CPU en ellos. 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 interpongan en su camino.

El siguiente paso fue el de hiper-enhebrado. Un chip en la placa madre pero tenía algunas partes dos veces internamente, por lo que podía ejecutar dos instrucciones al mismo tiempo.

El desarrollo actual es multinúcleo. Básicamente es la idea original (varias CPU completas) pero en un solo chip. La ventaja: los diseñadores de chips pueden colocar 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 repleta y hacia arriba en un segundo chip).

Las computadoras súper actuales son multi-cpu, multi-core: tienen muchas placas madre con generalmente 2-4 CPUs en ellas, cada CPU es multinúcleo y cada una tiene su propia RAM.

[EDIT] Tienes todo muy en lo cierto. Sólo unos pocos puntos de menor importancia:

  • 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 la CPU fuera de orden. Esto mantiene a las unidades de ejecución alimentadas con el trabajo, incluso cuando un subproceso se detiene en una falta de memoria caché, una derivación errónea de la bifurcación o la espera de resultados de instrucciones de latencia alta. Es una forma de obtener un mayor rendimiento total sin replicar mucho hardware, pero en todo caso ralentiza cada hilo individualmente. See this Q&A for more details, 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 CPUs pero solo un bus para acceder a la RAM. Entonces debe tener un hardware que asegure que a) cada CPU tenga una buena cantidad de acceso a RAM, b) que los accesos a la misma parte de la RAM no causen problemas yc) lo más importante, que la CPU 2 sea 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, la CPU 2 utilizará felizmente el valor almacenado en la memoria caché, ajeno al hecho de que está obsoleto

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

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

    Esto es lo que hace que las CPU múltiples sean tan complicadas. Los efectos secundarios de esto pueden llevar a un rendimiento que es peor de lo que obtendría si todo el código se ejecutara solo en una sola CPU. La solución era multinúcleo: puede agregar fácilmente tantos cables como necesite para sincronizar los cachés; incluso podría copiar datos de un caché a otro (actualizando partes de una línea de caché sin tener que enjuagarlos y volver a cargarlos), etc. O la lógica de caché podría asegurar que todas las CPU obtengan la misma línea de caché cuando acceden al mismo parte de la RAM real, simplemente bloqueando la CPU 2 durante unos nanosegundos hasta que la CPU 1 haya realizado sus cambios.

[Edit2] La razón principal por la cual varios núcleos es más simple que la multi-CPU es que en una placa base, usted simplemente no puede ejecutar todos los cables entre los dos chips, que se necesitaría para hacer efectiva sincronización . Además, una señal solo viaja a 30 cm/s como máximo (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 influirse mutuamente (diafonía). Nos gusta pensar que 0 es 0V y 1 es 5V, pero en realidad, "0" es algo entre -0.5V (sobremarcha al dejar caer una línea de 1-> 0) y .5V y "1" está por encima de 0.8V.

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

+2

Su noción de hiper-threading puede ser un poco engañosa, ya que hyperthreading "solo" simula la ejecución paralela de múltiples hilos, pero principalmente trata de mejorar el rendimiento de subprocesos múltiples a través de la lógica incorporada de la CPU. –

+0

@jcinacio, ¿hyper-threading mejora el rendimiento de múltiples procesos? ¿Por qué? – George2

+0

@ Aaron, 1. He editado mis puntos actuales en mi publicación original después de haber aprendido de usted. ¿Podrías ayudar a revisar y comentar por favor? 2. Lo que significa "exponer algunos de sus datos internos a la otra CPU para que no se interpongan en su camino". en tu publicación? – George2

2

En pocas palabras: el sistema multi-CPU o multiprocesador tiene varios procesadores. Un sistema multi-core es un sistema multiprocesador con varios procesadores en el mismo dado. En hyperthreading, varios subprocesos se pueden ejecutar 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 sobre todo en los laboratorios. Multi-core es el nuevo multiprocesador popular. Los procesadores de servidor hoy en día implementan hyperthreading junto con multiprocesadores.

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

+0

Amit, 1. He editado mis puntos actuales en mi publicación original después de haberme enterado de usted. ¿Podrías ayudar a revisar y comentar por favor? 2. ¿Qué significa morir y romper en tu publicación? – George2

+0

lágrima-> año (lo siento), morir: http://en.wikipedia.org/wiki/Die_(integrated_circuit) –

+0

Es bueno aprender de usted. ¡Amit! – George2

4

Puede encontrar algunos artículos interesantes sobre doble CPU, multi-core e hiper-threading en Intel's website o en un breve artículo de Yale University.

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

+0

Bogdan, he editado mis puntos actuales en mi publicación original. ¿Podrías ayudar a revisar y comentar por favor? Los aprendí después de leer tus enlaces recomendados. – George2

+0

@ George2 - Su edición es muy cierta. Esa es la idea completa. :) Lo mejor que puedes obtener en un servidor es probablemente una multi-core multi-CPU –

+1

Ambos enlaces están rotos :( – redobot