Categorías
CS Courses

AMD versus Intel: éxitos y dificultades de las arquitecturas de sus procesadores – (2) Comparación de Bulldozer y Sandy Bridge

II. Análisis y discusión extensos

A. Arquitecturas de conjuntos de instrucciones

Cuando se trata de la arquitectura del conjunto de instrucciones, hay dos categorías: Computadora con conjunto de instrucciones reducido (RISC) y Computadora con conjunto de instrucciones complejo (CISC). Las instrucciones CISC son altamente especializadas y, por lo tanto, pueden admitir una variedad de instrucciones y modos de direccionamiento. Pero tienen diferente CPI y tamaño de instrucción. Por el contrario, las instrucciones RISC son breves y sencillas, pero solo pueden admitir menos modos de direccionamiento. Tienen el mismo IPC bajo. Sin embargo, es necesario programar las instrucciones más complejas. El debate entre CISC y RISC ha sido de larga data[7].

Aunque x86 se reconoce como una arquitectura CISC, tiene las ventajas de la arquitectura RISC y CISC[5, 7]. Peter Glaskowsky dijo: «La arquitectura x86 domina los mercados de PC y servidores, pero las entrañas de los chips x86 modernos son muy similares a RISC».[6]. La forma en que funciona es que la compleja instrucción x86 se traduce a un código microoperativo corto y simple que es similar a RISC.

De esta forma, la arquitectura puede beneficiarse tanto del diseño CISC como del RISC. X86 se ha utilizado tanto en procesadores Intel como AMD como Intel i3 / i5 / i7, AMD Phenom, AMD Athlon, etc. Por lo tanto, ambos tienen la ventaja de este diseño combinado.

B. Jerarquía de la memoria

En esta sección, compararé dos ejemplos de CPU de AMD e Intel. Los modelos seleccionados son FX-8320/8150 vs i7 2600, ya que tienen un rendimiento similar según [4] y sus precios están cerca el uno del otro. Seleccionar algunos procesadores para compararlos entre sí podría ser una elección subjetiva, se pueden elegir en función del rendimiento de algún punto de referencia o simplemente del precio. Sin embargo, solo me interesa un sentido general del diseño de su memoria, por lo que esas selecciones deberían ser más que suficientes para este propósito. La siguiente tabla compara la información de la memoria de esos procesadores, la información es del manual del producto Intel y AMD [2, 3] y [8, 9].

Tabla I. AMD vs. Intel: jerarquía de memoria

AMD FX-8150 Intel i7 2600
Microarquitectura Excavadora Sandy Bridge
Núcleos 8 núcleos
4 módulos
4 núcleos
Caché L1 256 KB (I)
128 KB (D)
64 KB por módulo (I)
16 KB por núcleo (D)
Conjunto de 2 vías asociativo
4 * 32 KB (I)
4 * 32 KB (D)
Asociativo de 4 vías para instrucciones
Asociativo de 8 vías para datos
Caché L2 4 * 2 MB
Cada 2 MB se comparte entre 2 núcleos en un módulo
Asociativo de 16 vías
4 * 256 KB
Cada 256 KB es privado para cada núcleo
Asociativo de 8 vías
Caché L3 8 MB
todo el núcleo compartido
Asociativo de 64 vías
8 MB
todo el núcleo compartido
Asociativo de 16 vías
esquema de reemplazo pseudo-LRU L1 pseudo-LRU
Pseudo-LRU L2
Pseudo-LRU L4 pero con un algoritmo de selección ordenado
Latencia 4 (carga de caché L1) 4 (caché L1)
11 (caché L2)
25 (caché L3)
Ancho de banda de memoria máximo 21 GB / s 21 GB / s
Soporte de canal de memoria ahora conocido 3 canales de memoria
Cada canal consta de un conjunto separado de DIMM
Cada canal puede transferir en paralelo
Direcciones de memoria física y virtual Direcciones físicas y virtuales de 48 bits Direcciones virtuales de 48 bits y direcciones físicas de 36 bits
Característica TLB 2 niveles TLB 2 niveles TLB
Cómo se indexan las cachés no conocida L1: virtualmente indexado y etiquetado físicamente
L2: indexado físicamente
L3: indexado físicamente
  Un programa Lisp para calcular la operación de sufijo

De la Tabla I anterior, podemos concluir que tanto AMD como Intel tienen un diseño de memoria similar. Ambos usan la política LRU que puede aprovechar la localidad de tiempo. Tanto AMD como Intel tienen varios niveles de cachés. Este diseño puede ayudar al procesador a obtener los datos rápidamente y evitar más pérdidas de caché. El enfoque virtualmente indexado y etiquetado físicamente utilizado en L1 permite que la lectura de la caché comience inmediatamente y que la comparación de etiquetas use direcciones físicas[1](P-B38).

C. Optimización del rendimiento de la caché:

Para optimizar el rendimiento de la caché, existen 10 técnicas comunes que se aplican al diseño de la caché [1]. El objetivo es reducir el tiempo de acierto, aumentar el ancho de banda de la caché, reducir la penalización por fallar, reducir la tasa de fallas y reducir la penalización por fallas o la tasa de fallas mediante el paralelismo [1](P79). En esta sección, enumero cómo AMD e Intel usan esas técnicas de optimización. El nombre de esas técnicas ha cambiado ligeramente de [1](P79-92).

1. Utilice cachés de primer nivel pequeños y simples para reducir el tiempo de golpe y la potencia.

De la tabla I, esto es cierto para los procesadores AMD e Intel. Para i7, L3 tiene un tamaño de 8 MB y usa asociatividad de 16 vías, mientras que L1 tiene solo 32 KB y asociatividad de 4 u 8 vías.

2. Canalice el acceso a la caché para aumentar el ancho de banda de la caché.

Esta técnica canaliza el acceso a la caché para que la latencia de aciertos de la caché de primer nivel pueda ser de varios ciclos. De esta manera, el tiempo del ciclo del reloj es más corto y el ancho de banda es mayor, pero los accesos son más lentos. En la canalización actual de Intel Core i7, se necesitan 4 relojes para acceder a la caché. AMD también tiene la canalización de almacenamiento de carga.

3. Cachés sin bloque para aumentar el ancho de banda de la caché.

La caché sin bloqueo permite que la caché de datos continúe proporcionando datos cuando ocurre un error. De esta manera, no es necesario que el procesador se detenga por error. El Intel Core i7 como procesador de alto rendimiento admite tanto el «golpe bajo múltiples fallas» y el «fallado bajo fallas»[1](P83).

4. Cachés de múltiples bancos para aumentar el ancho de banda de la caché.

Esto significa dividir la caché en bancos independientes que puedan admitir múltiples accesos al mismo tiempo. Esta técnica acelera el acceso. Intel Core i7 tiene cuatro bancos en L1 y ocho bancos en L2 [1](P85).

5. Combine el búfer de escritura para reducir la penalización por fallar.

Los búferes de escritura se utilizan en cachés de escritura simultánea. Fusionar búfer de escritura significa combinar una entrada cuya dirección coincide con la dirección de otra entrada en el búfer. El Intel Core i7 utiliza esta técnica de fusión en sus cachés.

6. Obtenga instrucciones y datos previamente para reducir la penalización o la tasa de errores a través del hardware.

La captación previa de hardware significa que el hardware fuera de la caché capta previamente instrucciones / datos antes de que el procesador los solicite. El Intel Core i7 admite esta técnica en sus cachés L1 y L2.

  ¿Cómo se almacena una matriz en la memoria y se lleva a la caché?

D. Paralelismo a nivel de instrucción

Cuando hablamos de paralelismo en el nivel de instrucción, los enfoques principales incluyen la programación estática, la programación dinámica, la predicción de ramas, múltiples cuestiones, la especulación y sus combinaciones.

1. Programación estática
La programación estática significa usar el compilador para lidiar con las dependencias y minimizar las paradas. Esta técnica se puede utilizar en una canalización programada dinámicamente.

2. Programación dinámica
La programación dinámica significa ejecutar una instrucción tan pronto como sus operandos estén disponibles (ejecución fuera de orden), esto introduce los peligros WAR y WAR que no existen en el pipeline clásico de 5 etapas. Esperar a que los operandos estén disponibles resuelve los peligros de RAW, y el cambio de nombre de registros dinámicos resuelve los peligros de WAR y WAW. La versión simple del enfoque de Tomasulo da como resultado una emisión en orden y una finalización fuera de orden, pero al combinar la especulación, puede realizar una ejecución fuera de orden y una confirmación en orden.

3. Predicción de ramas
Intel Core i7 utiliza un predictor de dos niveles. El primer nivel es lo suficientemente pequeño como para predecir una rama en cada ciclo de reloj, y el segundo nivel es más grande para servir como respaldo. Cada predictor combina: 1) un predictor de dos bits, 2) un predictor de historial global y 3) un predictor de salida de bucle. El mejor predictor se selecciona en función de la precisión de cada predictor.

AMD Bulldozer tiene un nuevo diseño de predicción de ramas [13]. El esquema es un método híbrido con un predictor local y un predictor global. El búfer de destino de bifurcación (BTB) tiene dos niveles: el nivel 1 está organizado como una caché asociativa de conjuntos con 128 conjuntos de 4 vías y el nivel 2 tiene 1024 conjuntos de 5 vías [13].

4. Temas múltiples
Se pueden lograr varios problemas mediante el uso de un procesador superescalar estático, un procesador superescalar dinámico o un procesador VLIW. VLIW significa empaquetar múltiples operaciones en una instrucción grande. Esta técnica se utiliza principalmente en el procesamiento de señales, no en procesadores AMD o Intel.

5. Especulación
Al agregar un búfer de reorden, los resultados temporales se pueden retener en esas entradas del búfer. Solo cuando una instrucción llega a la parte superior del búfer de reorden, se puede confirmar y luego eliminar del búfer.

El enfoque principal utilizado en Intel Core i3, i5, i7 y AMD Phenom es superescalar especulativo [1](P194). Su estructura de problemas es dinámica, la detección de peligros está en el hardware, la programación es dinámica con la especulación y la ejecución fuera de orden con la especulación. [1](P194).

Cuadro II. AMD frente a Intel: hardware para programación dinámica

AMD FX-8150 Intel i7 2600
Ancho de decodificación de instrucciones [11] 4 de ancho 4 de ancho
Decodificación de pico de un solo núcleo [11] 4 instrucciones 4 instrucciones
Cola de decodificación de instrucciones[9] 16 entrada 18+ entrada
Amortiguadores Cola de carga de 40 entradas
Cola de tienda de 24 entradas [11]
48 búferes de carga y 32 de almacenamiento
profundidad de la tubería 18+ etapas 14 etapas
penalización por predicción errónea de rama 20 ciclos de reloj para ramas condicionales e indirectas
15 ciclos de reloj para saltos y retornos incondicionales
17 ciclos
estación de reserva Número entero unificado de 40 entradas, programador de memoria [8]
Programador de punto flotante unificado de 60 entradas [8]
Estación de reserva centralizada de 36 entradas compartida por 6 unidades funcionales
reordenar búfer Cola de jubilación de 128 entradas Búfer de reorden de 128 entradas
  Pasos necesarios para realizar una llamada al sistema

Además de la información que se muestra en la tabla II, las latencias para las instrucciones de punto flotante y las instrucciones de vectores enteros son más largas que las de Sandy Bridge de Intel normalmente.[13].

E. Paralelismo a nivel de subprocesos

Hay dos tipos de multiprocesadores de memoria compartida existentes: multiprocesador de memoria compartida centralizada y multiprocesador de memoria compartida distribuida.

La coherencia de la memoria es el principal problema que debe manejarse. Los protocolos para mantener la coherencia de la memoria incluyen la función de directorio y el espionaje. La diferencia clave entre los protocolos de espionaje y el protocolo basado en directorio es que cada nodo espía en los medios de difusión en el protocolo de espionaje, mientras que el protocolo basado en directorio usa un directorio para cada bloque de caché y la comunicación es solo entre los nodos involucrados. En el protocolo basado en directorio, una solicitud de un nodo siempre se envía primero al directorio y luego a los nodos involucrados.

Para implementar un protocolo de invalidación en multinúcleo, se utiliza un bus para realizar invalidaciones. [1](P356). En lugar de un bus de acceso a memoria compartida, en los procesadores multinúcleo más nuevos, el bus utilizado para la coherencia puede ser la conexión entre las cachés privadas y las compartidas. [1](P356). El Intel Core i7 utiliza este enfoque. Este enfoque optimiza la velocidad y es más rápido. [1](P356).

La limitación de los multiprocesadores centralizados de memoria compartida y los protocolos de espionaje es el cuello de botella de los recursos centralizados. [1](P363). El Intel Core i7 colocó un directorio en el caché L3 más externo. El directorio contiene información sobre qué cachés del procesador tienen una copia en bloque en el caché L3 más externo [1](P363). Se implementa como un vector de bits de tamaño igual al número de núcleos para cada bloque L3. [1](P363, 379)

AMD Opteron utiliza un enfoque que se encuentra en el medio entre un espionaje y un protocolo basado en directorios. [1](P363). En primer lugar, la memoria está conectada a cada chip multinúcleo y se pueden conectar 4 de estos chips como máximo [1](P363). Debido a que la memoria local es más rápida de acceder, se considera un acceso a la memoria no uniforme. [1](P363). En segundo lugar, Opteron usa enlaces punto a punto para transmitir a otros chips y usa reconocimiento explícito para verificar que se haya completado una operación no válida. [1](P363). También vale la pena mencionar aquí que la caché más externa para cada chip multinúcleo también se comparte entre los núcleos; este es el mismo enfoque que usa el Intel Core i7[1](P384).

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *