Memoria Cache Memorias: Evolución Pioneros: Maurcice Wilkes con la primer memoria de tanque de mercurio para la computadora EDSAC. 2 bytes: 1947. Visionarios…. "640K debe ser suficiente para cualquiera.” Bill Gates, 1981 Tecnología de memorias: RAM Dinámica CAS RAS Cd Buffer Bit de datos de salida al bus Transistor Diagrama de un bit elemental de DRAM (Dynamic RAM). Almacena la información como una carga en una capacidad espuria de un transistor. Una celda (un bit) se implementa con un solo transistor ⇒ máxima capacidad de almacenamiento por chip. Ese transistor consume mínima energía ⇒ Muy bajo consumo. Al leer el bit, se descarga la capacidad ⇒ necesita regenerar la carga ⇒ aumenta entonces el tiempo de acceso de la celda. Tecnología de memorias: RAM Estática Línea de Bit Línea de Bit Selección 1 3 4 2 5 6 Diagrama del biestable de un bit básico de SRAM (Static RAM). Almacena la información en un biestable. Una celda (un bit) se compone de seis transistores ⇒ menor capacidad de almacenamiento por chip. 3 transistores consumen energía máxima en forma permanente y los otros 3 consumen mínima energía ⇒ Mayor consumo La lectura es directa y no destructiva ⇒ tiempo de acceso muy bajo Estructura de Bus clásica Desde fines de los años 80, los procesadores desarrollaban velocidades muy superiores a los Bus Local del tiempos de acceso a Procesador memoria. Procesador Procesador Buffer Buffer de de Datos Datos ADDRESS DATOS CONTROL Bus Bus de de Control Control Buffer Buffer de de Address Address BUS DEL SISTEMA Memoria Memoria del del Sistema Sistema E/S E/S del del Sistema Sistema En este escenario, el procesador necesita generar wait states para esperar que la memoria esté lista (“READY”) para el acceso. ¿Tiene sentido lograr altos clocks en los procesadores si no puede aprovecharlos por tener que esperar (wait) a la memoria? Crecimiento de la velocidad de clock de las CPU versus memoria 1100 1000 Pentium III 1GHz 900 800 700 600 Pentium II 400 MHz. 500 400 486 DX4 100 MHz. 300 Memorias 200 386 DX 33 MHz 100 89 90 91 92 93 94 95 96 97 98 99 00 El problema RAM dinámica (DRAM) Consumo mínimo. Capacidad de almacenamiento comparativamente alta. Costo por bit bajo. Tiempo de acceso alto (lento), debido al circuito de regeneración de carga. Si construimos el banco de memoria utilizando RAM dinámica, no aprovechamos la velocidad del procesador. RAM estática (SRAM) Alto consumo relativo. Capacidad de almacenamiento comparativamente baja. Costo por bit alto. Tiempo de acceso bajo (es mas rápida). Si construimos el banco de memoria utilizando RAM estática, el costo y el consumo de la computadora son altos. La solución: Memoria cache Se trata de un banco de SRAM de muy alta velocidad, que contiene una copia de los datos e instrucciones que están en memoria principal Se busca que esta copia esté disponible justo cuando el procesador la necesita permitiéndole acceder a esos ítems sin recurrir a wait states. Combinada con una gran cantidad de memoria DRAM, para almacenar el resto de códigos y datos, resuelve el problema mediante una solución de compromiso típica. Requiere de hardware adicional que asegure que este pequeño banco de memoria cache contenga los datos e instrucciones mas frecuentemente utilizados por el procesador. Referencias El tamaño del banco de memoria cache debe ser: Suficientemente grande para que el procesador resuelva la mayor cantidad posible de búsquedas de código y datos en esta memoria asegurando una alta performance Suficientemente pequeña para no afectar el consumo ni el costo del sistema. Se dice que se logra un hit cuando se accede a un ítem (dato o código) y éste se encuentra en la memoria cache. En caso contrario, se dice que el resultado del acceso es un miss. Se espera un hit rate lo mas alto posible hit rate= Cantidad de accesos con presencia en Memoria Cache Cantidad total de accesos a memoria Operación de Lectura de memoria Inicio CPU envía señal de lectura Hit!! Busca ítem en cache Busca ítem en cache y envía a la CPU Miss Busca ítem en memoria del sistema Escribe ítem en el cache Actualiza directorio cache Fin Envía ítem a la CPU Estructura de Bus del sistema con cache Procesador Procesador ADDRESS DATOS CONTROL Memoria MemoriaCONTROLControlador Controlador de de cache Memoria caché cache Memoria caché Buffer Buffer de de Datos Datos Bus Local del procesador Buffer Buffer de de Bus Local del Address Address controlador cache Bus Bus de de Control Control BUS DEL SISTEMA Memoria Cache Procesador Procesador Bus del Procesador (Bus local) Baja capacidad, pero ¡¡accesible a la velocidad del procesador!! Subsistema caché Controlador Controlador de de Memoria caché Memoria caché Memoria Memoria SRAM SRAM ultrarrápida ultrarrápida (cache) (cache) Bus del Sistema Control del bus local del controlador cache Memoria DRAM Hardware adicional. Mantiene el cache con los datos mas frecuentemente utilizados por el procesador Interfaz con el Arbitración del Bus Bus Local Control del bus Local del Procesador Interfaz con el Procesador Decodificaciones del bus local del procesador Configuración Bus de Address del procesador Directorio de Cache Control del Cache Bus de Snoop Bus de Control de la Memoria Cache Como trabaja el controlador cache El controlador cache trabaja mediante dos principios que surgen de analizar el comportamiento de los algoritmos de software que se emplean habitualmente. Principio de vecindad temporal: temporal Si un ítem es referenciado, la probabilidad de ser referenciado en el futuro inmediato es alta. Principio de vecindad espacial: espacial Si un ítem es referenciado, es altamente probable que sean referenciados sus ítems vecinos. Ejemplo: for (i = 0 ; i < 256 ; i++ ){ suma = 0.0f; for (j = 0 ; (j <= i && j < 256) ; j++) suma += v0[i-j] * v1[j]; fAux[i] = suma; } i, j, suma, se utilizan a menudo. Por lo tanto si se mantienen en el cache, el tiempo de acceso a estas variables por parte del procesador es óptimo. Estructura de memoria cache Tag Línea Dirección 0 1 2 3 4 5 6 7 8 9 Línea: Elemento mínimo de palabra de datos dentro del cache. Corresponde a un múltiplo del tamaño de la palabra de datos de memoria. Set: Conjunto de líneas. En el cache se actualiza el set completo (Principio de vecindad espacial) Línea Ancho de palabra Organización del caché: Mapeo Directo Bit de validez del Tag 1 Línea = 4 bytes 1 Set = 8 líneas Línea Tag 17 bits Set 0 Línea Bits de validez de las líneas 32 Kbytes (igual tamaño Que el del cache) Set 1 Pag.217 -1 Set 1023 Directorio de Caché Interno Memoria Caché 32 KB Pag.0 4 Gbytes de Memoria Principal Organización del caché de mapeo directo Caché Address (1 de 8 KLíneas) A 15 A 14 A 31 Tag de 17 bits (1 de las 217 páginas) A5A4 A 2 Set Address (1 de 1024 sets) Selector de Línea (1 de 8 líneas) Bit de validez del Tag 0 Nro de Set Bits de validez de la línea 1 1023 Directorio de Caché Interno Organización del caché: Asociativo de dos vías Bit de validez del Tag Línea Tag Set 0 18 bits Bits de Bits validez LRU de las líneas Bits LRU Línea Línea 18 bits 18 bits Set 1 18 bits Bits LRU 16 Kbytes (igual tamaño Que el de cada banco del cache) 18 bits 1 Línea = 4 bytes 1 Set = 8 líneas Pag.218 -1 18 bits Set 511 Directorio de Caché Interno Memoria Caché 2 x 16 KB Pag.0 4 Gbytes de Memoria Principal Organización del caché asociativo de dos vías Caché Address (1 de 4 KLíneas) A31 A14 A13 Tag de 18 bits (1 de las 218 páginas) A5 A4 Set Address (1 de 512 sets) Selector de Línea (1 de 8 líneas) Bit de validez del Tag 0 Nro de Set Bits de validez de la línea 1 512 Directorio de Caché Interno A2