Microarquitectura (2da parte)
Ing. Marcelo Doallo
Octubre 2012
Manejo del contenido de la memoria cache
Algoritmos de reemplazo del contenido de los set’s de la memoria cache:
LRU: Least Recently Used.
Se corresponde con el principio de vecindad temporal.
LFU: Last Frecuently Used Random
FIFO
Cache miss: Impacto en el Pipeline de instrucciones
Si la b ´usqueda de una instrucci ´on o de un operando en el cache falla, entonces el procesador debe recurrir a la memoria principal.La demora en el acceso hace que el pipeline se atasque (stall)
Una vez recuperado el dato de memoria principal se requieren (en este ejemplo), 5 ciclos de reloj adicionales para recuperar el ritmo de operaci ´on del pipeline!!
Coherencia de un cache
Una variable que est ´a en el cach ´e tambi ´en est ´a alojada en alguna direcci ´on de la DRAM
Ambos valores deben ser iguales
Cuando el procesador la modifica hay varios modos de actuar
Si el procesador realiza un miss mientras el controlador cache est ´a accediendo a la DRAM para actualizar el valor, deber ´a esperar hasta que controlador cache termine la actualizaci ´on para recibir desde este la habilitaci ´on de las l´ıneas de control para acceder a la DRAM.
Modos de actualizaci ´on de informaci ´on
Write through: El procesador escribe en la DRAM y el controlador cache refresca el cache con el dato actualizado
Write through buffered: El procesador actualiza la SRAM cache, y el controlador cache luego actualiza la copia en memoria DRAM mientras el procesador contin ´ua
ejecutando instrucciones y usando datos de la memoria cache
Copy back: Se marcan las l´ıneas de la memoria cache cuando el procesador escribe en ellas. Luego en el momento de eliminar esa l´ınea del cach ´e el controlador cache deber ´a actualizar la copia de DRAM.
Estructura de Bus del sistema Multiprocesador con
cache
Multilevel cache
Protocolo de coherencia de cache MESI
Pensado para arquitecturas multiprocesador Cada l´ınea de cache tendr ´a un estado:
M - Modified: L´ınea presente solamente en ´este cache que
vari ´o respecto de su valor en memoria del sistema (dirty). Requiere write back hacia la memoria del sistema antes que otro procesador lea desde all´ı el dato (que ya no es v ´alido).
E – Exclusive: L´ınea presente solo en esta cache, que
coincide con la copia en memoria principal (clean).
S – Shared: L´ınea del cache presente y puede estar
almacenada en los caches de otros procesadores.
I – Invalid: L´ınea de cache no es v ´alida.
Interrupciones en SMP: El APIC
A partir del Procesador Pentium, Intel agreg ´o al chip del procesador un m ´odulo llamado APIC: Advanced
Programable Interrupt Controller, controlador de
Interrupciones embebido que soporta multiprocesamiento. El APIC requiere ser espec´ıficamente habilitado.
Su utilidad se nota cuando se dise ˜nan sistemas con mas de un procesador (Symmetrical Multi Processor = SMP) En un sistema Mono Procesador, se puede trabajar sin habilitarlo, y usar los conocidos PIC’s 8259 presentes en el motherboard.
Si se lo habilita el procesador transforma los pines de interrupci ´on en:
PICCLK: Terminal de sincronizaci ´on con el otro procesador PICD0 y PICD1 bus de comunicaci ´on de dos l´ıneas
I/O APIC
El I/O APIC est ´a incluido en el chipset que acompa ˜na a cada procesador
Si tenemos, por ejemplo, 4 procesadores, los APICs se conectan a trav ´es de un juego de tres l´ıneas y por cada requerimiento de interrupci ´on recibido desde los
dispositivos de E/S conectados, el I/O APIC reparte las interrupciones entre los diferentes procesadores de
acuerdo a las condiciones de disponibilidad obrando como balanceador de carga
Fuentes de interrupciones del APIC
Locales: Ingresan por los pines del procesador (con el APIC habilitado se llaman LINT0 y LINT1).
Externas: El I/O APIC externo genera cuando recibe una interrupci ´on desde alg ´un dispositivo de E/S en particular. Inter Processor Interrupts (IPIs): Son enviadas y
recibidas por un procesador para interrumpir a otro o a un grupo de procesadores conectados al mismo bus de sistema.
Timer del APIC: Se lo programa para enviar a ´este interrupciones peri ´odicas.
Overflow en el timer de Monitoreo de performance.
Sensor t ´ermico: Estos procesadores se auto interrumpen cuando su temperatura supera un valor tope determinado. Error interno en el APIC: SI se accede a un registro inexistente por ejemplo, el APIC se auto genera una interrupci ´on.
Micro-Arquitectura 486
80486DX, 80486SX, 80486DX2, 80486DX4
Cache Multi Level (L1, y L2 cache)
Ejemplo pr ´actico: Procesador 80486DX. Fue el primero en introducir esta arquitecturas
Micro-Arquitectura P5
Pentium, Pentium MMX
Procesador Pentium: Caracter´ısticas
Arquitectura Superescalar
Dos pipelines de instrucciones
U pipeline: Ejecuta instrucciones enteras o de punto flotante (equivale a la Unidad de ejecuci ´on del 486)
V pipeline. Ejecuta solo instrucciones enteras en paralelo con el U.
Dependencia de Informaci ´on. Dependencia de Recursos.
Bus externo de datos de 64 l´ıneas
Asegura la lectura de dos instrucciones a la vez ya que ejecuta dos instrucciones a la vez
Branch Prediction Branch Target Buffer
Dos Cache L1 internas: una de datos (8 Kbytes) y otra de c ´odigo (8 Kbytes)
Branch Prediction
Emplea Predicci ´on est ´atica de salto (es decir, asume que siempre salta).
Branch Table Buffer (BTB).
El procesador guarda en ese buffer la direcci ´on destino de una instrucci ´on de branch durante la etapa de
decodificaci ´on.
En el caso de que la predicci ´on almacenada por la Unidad de decodificaci ´on del pipeline (U o V) haya sido exacta la instrucci ´on se ejecuta sin atascos ni flushes del pipeline. Si al momento de la evaluaci ´on de la direcci ´on de salto esta no coincide con la predicci ´on almacenada en el BTB, debe buscarse el target correcto y se flushea el contenido de los pipelines.
4 ciclos de clock de demora en V pipeline 3 ciclos de clock de demora en el U Pipeline
Micro-Arquitectura P6
Pentium Pro, Pentium II, Pentium II Xeon, Celeron, Pentium III, Pentium III Xeon
Micro Arquitectura Three core engines
Emplea Dynamic Instruction Scheduling
Basado en una ventana de instrucciones y no en un pipeline superescalar.
Las instrucciones se traducen en micro operaciones b ´asicas (mops)
Las mops ingresan a un pool (ventana) en donde se mantienen para su ejecuci ´on
Los tres cores tienen plena visibilidad de esa ventana de ejecuci ´on
Se aplica la t ´ecnica de ejecuci ´on fuera de orden y ejecuci ´on especulativa.
La unidad de despacho y ejecuci ´on mantiene el modelo superescalar y lo combina con un super pipeline de 20 etapas
La unidad de retiro enviar ´a al exterior los resultados de acuerdo a la secuencia establecida en el programa.
Micro Arquitectura Three core engines
Funcionamiento del Core
Consideremos el siguiente c ´odigo gen ´erico r1 = mem [r0] /* instrucci ´on 1*/
r2 = r1 + r2 /* instrucci ´on 2*/ r5 = r5 + r4 /* instrucci ´on 3*/ r6 = r6 - r3 /* instrucci ´on 4*/
La instrucci ´on 1 genera un cache miss.
La instrucci ´on 2 depende del registro r1, no puede ejecutarse hasta no cargarse r1 con el valor v ´alido en la instrucci ´on 1.
En este punto cualquier core basado en ejecuci ´on en orden, se detiene hasta que se obtenga el operando apuntado por [r0] desde la memoria del sistema.
Funcionamiento del Core
Al crear una ventana de ejecuci ´on el procesador tiene visibilidad de mayor cantidad de instrucciones.
De este modo, un procesador P6 es capaz de ejecutar fuera de orden las instrucciones 3 y 4 que no son
dependientes de la 1, mientras la unidad de interfaz con el bus consigue el operando [r0].
La unidad de retiro no enviar ´a al exterior los resultados fuera de orden, sino que lo har ´a de acuerdo a la secuencia establecida en el programa.
La Unidad de Retiro puede enviar 3 resultados por ciclo de clock al exterior.
De este modo agrandando todo lo posible la ventana de ejecuci ´on el procesador puede ejecutar fuera de orden y en forma especulativa mayor cantidad de instrucciones ante demoras en el acceso a los datos.
Adem ´as puede ejecutar en forma especulativa ambas ramas de un branch, descartando luego de verificar la condici ´on aquellas correspondientes a la rama que no se debe ejecutar.
Las primeras versiones eran capaces de analizar hasta 20 instrucciones.
Three core engines en detalle
Three core engines en detalle (cont.)
Next IP: Indice al cache de Instrucciones basado en el contenido que le provee el BTB
ICache, env´ıa a la Unidad de Decodificaci ´on la l´ınea apuntada por Next IP y la siguiente, (total = 16 bytes alineados)
La Unidad de Preb ´usqueda rota los 16 bytes para
justificarlos a los decodificadores y les marca el comienzo y fin de cada instrucci ´on
Los decodificadores de Instrucci ´on toman las instrucciones IA-32 contenidas en los 16 bytes y las convierten en mops (c ´odigo de operaci ´on decodificado listo para ejecutar, dos operandos fuentes, un operando destino, y algunos bits de estado)
Instrucciones simples (La mayor´ıa se traduce en 1 mop, el resto entre 2 y 4 mops)
Instrucciones complejas: Son tomadas por el Microcode Instruction Sequencer que generar ´a la secuencia necesaria de mops
Three core engines en detalle (cont.)
Las mops se encolan en el Register Alias Table en donde las referencias a los registros IA-32 se convierten en referencias a registros internos de la Micro Arquitectura P6.
Luego las mops se inyectan en el pool (o Re Order Buffer) La Unidad de Despacho y Ejecuci ´on las toma de este buffer mediante el bloque denominado Reservation Station y las deriva a sus diferentes puertos de ejecuci ´on.
El criterio de selecci ´on no es el orden que ocupan en el flujo de programa sino el estado que indican los bits correspondientes de cada mop.
Si estos bits indican que los operandos fuente de la instrucci ´on est ´an listos, se chequea si el recurso necesario para ejecutar esta mop est ´a disponible.
Si lo est ´a se ejecuta. Si no se espera a que se libere el recurso y se env´ıa
Un procesador P6 puede despachar 5 mops por los diferentes ports de ejecuci ´on.
Three core engines en detalle (cont.)
Las mops de branch se marcan en el pipeline con la direcci ´on de ca´ıda y la direcci ´on que se le precede. Cuando se ejecuta la instrucci ´on en la JEU
Si la direcci ´on resultante coincide con la predicci ´on almacenada en el BTB el resultado del procesamiento especulativo realizado en el Pool de Instrucciones se considera v ´alido.
Si el resultado no coincide entonces la JEU cambia el estado de todas las operaciones de la rama que se ejecut ´o especulativamente asumi ´endosela como v ´alida, y las remueve del Pool Instrucciones.
Unidad de Retiro
Chequea el estado de las mops en el pool (o Re Order Buffer). En busca de ejecutadas y sin ninguna mop precedente a ´un sin retirar del Pool de Instrucciones. Una vez retirada del Pool, escribe el destino IA-32 de la instrucci ´on original con el resultado.
Micro Arquitectura NetBurst
Pentium IV, Xeon, Pentium IV HT, Pentium M
Micro Arquitectura NetBurst: Diagrama
Micro Arquitectura NetBurst: Front end
Fetch/decode unit
Execution trace cache. Tama ˜no 12K mops. Funciones b ´asicas:
Preb ´usqueda de instrucciones para ser ejecutadas B ´usqueda de instrucciones que a ´un no han sido pre buscadas
Decodificaci ´on de las instrucciones en micro-operaciones Generaci ´on de micro c ´odigo para instrucciones complejas Env´ıo al Trace cach ´e de ejecuci ´on de las instrucciones decodificadas (mops)
Predicci ´on de saltos mediante algoritmos mas avanzados
Micro Arquitectura NetBurst: Out of Order Core
Pentium IV:
Wide Dynamic Execution
Cuatro v´ıas de ejecuci ´on de Micro operaciones en paralelo por cada core
Cuatro decodificadores. Hasta 5 decodificaciones por ciclo de clock. (contra las tres de la microarquitectura anterior) Microfusion
Macrofusion ALU’s mejoradas
Macrofusion
Macrofusion
Microfusion
Una vez decodificadas las instrucciones se traducen en mops.
La mayor´ıa de las instrucciones se traducen en 1 mop. Las instrucciones complejas se convierten en varias mops. Las ALU ejecutan mops
Microfusion permite agrupar varias mops en una mas compleja de modo de minimizar la cantidad de mops que se enviar ´an en cada unidad de ejecuci ´on.
Tecnolog´ıa Hyperthreading
Consumo
Tecnolog´ıa SpeedStep. Las unidades inician su operaci ´on sub clockeadas, y aumentan la frecuencia a medida que la
operaci ´on lo requiere (Pentium M)
Referencias
Intel 64 and IA-32 Architectures Software Developer’sR
Manual Volume 1: Basic Architecture. Cap´ıtulo 2
Organizaci ´on y Arquitectura de Computadores. 5ta. Ed. William Stallins.Cap´ıtulos 4, 12, 13, y 16
https://www.cs.tcd.ie/Jeremy.Jones/vivio/caches/MESIHelp.htm