Jerarquía de memoria: Cache,

Slides:



Advertisements
Presentaciones similares
GESTION DE MEMORIA.
Advertisements

III - Gestión de memoria
Procesadores Superescalares
Conocimiento, Uso y Evaluación de Medicamentos Genéricos
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
1 LA UTILIZACION DE LAS TIC EN LAS PYMES GALLEGAS AÑO de Junio de 2005.
TEMA 2 MÚLTIPLOS Y DIVISORES
IBD Clase 7.
Organización y arquitectura de sistemas de memoria
CLASE 3 SOFTWARE DEL MICROPROCESADOR
Arquitectura de Computadores I
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Microprocesadores para comunicaciones Escuela Técnica Superior de Ingenieros de Telecomunicación Organización y estructura de las memorias caché.
Parte 3. Descripción del código de una función 1.
Prof. José Díaz Chow (Xdc.)
Introducción a los Sistemas Operativos Memoria Virtual
¡Primero mira fijo a la bruja!
Departamento de Ingeniería de Sistemas Universidad de Antioquia
Departamento de Ingeniería de Sistemas Universidad de Antioquia
Departamento de Ingeniería de Sistemas Universidad de Antioquia
MEMORIA 1.
SISTEMAS DE MEMORIA DEL COMPUTADOR
Tema II Unidad de memoria. 2 Unidad de memoria 2.1 Definiciones y conceptos básicos Localización Capacidad Unidad de transferencia
Algorítmo de Mapeo Directo
Memoria cache.
INTEGRANTES MEDINA ORTIZ MISSAEL MARTIN GONZALEZ MADRIGAL OMAR
Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al costo de una memoria de baja velocidad Los puntos básicos relacionados con.
Tema 3. Optimización de Código
Teoría de Sistemas Operativos
Estructura y Tecnolología de Ordenadores
Gustavo Andrés Uribe Gómez
Direcciones físicas y direcciones virtuales (lógicas)
Tema 10: Gestión de Memoria
Memoria Otros temas sobre cachés. Universidad de SonoraArquitectura de Computadoras2 Otros temas 1. Estrategias de búsqueda de bloque. 2. Estrategias.
Simulador didáctico de jerarquías de memoria
UNIDAD IV ADMINISTRACIÓN DE SISTEMAS CONCEPTOS DE GESTIÓN Y ALMACENAMIENTO.
Estructura y Tecnología de Ordenadores Noviembre 2004.
Administración de Memoria Memoria Virtual
Memoria Cachés. Universidad de SonoraArquitectura de Computadoras2 Introducción Caché es el nivel de memoria situada entre el procesador y la memoria.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Overview Sistemas Computacionales
Asignación de Espacio No Contiguo
Soporte HW para Administración de Memoria Cecilia Hernández
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 19 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
Capítulo 7 Gestión de memoria.
MEMORIA RAM Concepto RAM: Siglas de Random acces Memory, un tipo de memoria a la que se puede acceder de forma aleatoria; esto es, se puede acceder a cualquier.
Organización del Computador
Memorias.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 21 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
Programa del Curso Fundamentos del Diseño de Computador. Fundamentos del Diseño de Computador. Arquitectura del Conjunto de Instrucciones (Revisión). Arquitectura.
Organización del Computador
Memoria virtual. Introducción Muchos procesos, una memoria Programas demasiado grandes para caber en memoria principal Espacio de direccionamiento mucho.
Memoria virtual.
Memoria Principal Memoria de acceso aleatorio. La unidad de memoria y jerarquías de almacenamiento Unidades de Almacenamiento. La unidad de memoria es.
Gestión de Memoria.
Organización del Computador I Verano Memoria Virtual Basado en el capítulo 7 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.
Organización del Computador I Verano Jerarquía de Memoria Basado en el capítulo 7 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
1 Memorias. 2 RAM (Memoria de acceso aleatorio) El procesador puede tomar un dato que esté al principio, al medio o al final de la memoria RAM. Hardware.
Gestión de Memoria.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 20 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
Teoría de Sistemas Operativos Memoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
     Jerarquía de memoria.
PAUTAS PARA SELECCIONAR LA MEMORIA RAM. SURGUIMIENTO DE LA MEMORIA RAM Es la memoria basada en semiconductores que puede ser leída o escrita por el microprocesador.
Gestión de memoria Rina Arauz.
REPUBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD ALONSO DE OJEDA FACULTAD DE INGENIERÍA ESCUELA DE COMPUTACIÓN ING. PROF. LEONEL SEQUERA MEMORIAS.
Memoria Virtual Conceptos Paginación Bajo Demanda Creación de Procesos
Gestión de Memoria – Parte 2
Arquitectura de Computadores Clase 18 Memoria Caché: Fundamentos IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile Escuela.
Arquitectura de Computadores Clase 17 Tecnologías de Memorias IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile Escuela de.
Arquitectura de Computadores
Transcripción de la presentación:

Jerarquía de memoria: Cache, Tema 5 Jerarquía de memoria: Cache, reducción de fallos, ocultación de latencia, memoria principal

Contenidos Introducción: Jerarquía de memoria Rendimiento: mejoras Reducir la tasa de fallos de la cache Reducir la penalización de los fallos de cache Reducir el tiempo de acceso a la cache La memoria principal Una visión global: Alpha 21064 Bibliografía Capítulo 5 de [HePa07] [JaMu98a] B. Jacob, T. N. Mudge. “Virtual Memory: Issues of Implementation”. IEEE Computer Magazine. Vol. 31 (6), Junio 1998, Simulador X-CACHE

El problema Introducción 50% por año Gap memoria -procesador 9% por año La demanda de anchura de banda con memoria crece.

Introducción Niveles de la Jerarquía de memoria Registros de la CPU Cache (SRAMs) Memoria Principal (DRAMs) Almacenamiento en disco (estado sólido, magnéticos) Almacenamiento en cinta (cintas, discos ópticos) Tiempo de acceso Coste Capacidad nivel 0 nivel 1(1.1,1.2,1.3) nivel 2 nivel 3 nivel 4 Un computador típico está formado por diversos niveles de memoria, organizados de forma jerárquica: Registros de la CPU Memoria Cache Memoria Principal Memoria Secundaria (discos) Unidades de Cinta (Back-up) y CD-ROMs El coste de todo el sistema de memoria excede al coste de la CPU Es muy importante optimizar su uso

Introducción Tipos de Memoria Tipo Tamaño Velocidad Costo/bit Registros < 1KB < 1ns $$$$ On-chip SRAM 8KB-6MB < 10ns $$$ Off-chip SRAM 1Mb – 16Mb < 20ns $$ DRAM 64MB – 1TB < 100ns $ Disco 40GB – 1PB < 20ms ~0

Introducción Objetivo de la gestión de la jerarquía de memoria Optimizar el uso de la memoria Hacer que el usuario tenga la ilusión de que dispone de una memoria con: Tiempo de acceso similar al del sistema más rápido Coste por bit similar al del sistema más barato La mayor parte de los accesos a un bloque de información, este bloque debe encontrarse en los niveles altos (bajos) de la memoria Niveles a los que afecta la gestión de la jerarquía memoria Se refiere a la gestión dinámica, en tiempo de ejecución de la jerarquía de memoria Esta gestión de la memoria sólo afecta a los niveles 1 (cache), 2 (mem. principal) y 3 (mem. secund.) El nivel 0 (registros) lo asigna el compilador en tiempo de compilación El nivel 4 (cintas y CD-ROMs) se utiliza para copias de seguridad (back-up) Gestión de la memoria cache Controla la transferencia de información entre la memoria cache y la memoria principal Suele llevarse a cabo mediante Hardware específico (MMU o “Management Memory Unit”) Memoria Cache Gestión de la memoria cache Gestión de la memoria virtual Memoria Principal Controla la transferencia de información entre la memoria secundaria y la memoria principal Parte de esta gestión se realiza mediante hardware específico (MMU) y otra parte la realiza el S.O Gestión de la memoria virtual Memoria Secundaria

Introducción Propiedades de la jerarquía de memoria Inclusión Cualquier información almacenada en el nivel de memoria Mi, debe encontrarse también en los niveles Mi+1, Mi+2, …, Mn. Es decir: M1⊂ M2 ⊂ … ⊂ Mn Coherencia Las copias de la misma información existentes en los distintos niveles deben ser consistentes Si un bloque de información se modifica en el nivel Mi, deben actualizarse los niveles Mi+1,.., Mn Existen distintas estrategias de actualización Escritura directa (write-through): Cuando una palabra se modifica en el nivel Mi, inmediatamente se actualiza en el nivel Mi+1 Post-escritura (write-back): La actualización del nivel Mi+1 se retrasa hasta que el bloque que se modificó es reemplazada o eliminada en el nivel Mi Localidad La propiedad de localidad dice que las referencias a memoria generadas por la CPU, para acceso a datos o a instrucciones, están concentradas o agrupadas en ciertas regiones del tiempo y del espacio Localidad temporal Las direcciones de memoria (instrucciones o datos) recientemente referenciadas, serán referenciadas de nuevo, muy probablemente, en un futuro próximo Ejemplos: Bucles, subrutinas, accesos a pila, variables temporales, etc. Localidad espacial Tendencia a referenciar elementos de memoria (datos o instrucc.) cercanos a los últimos elementos referenciados Ejemplos: programas secuenciales, arrays, variables locales de subrutinas, etc.

Introducción Terminología Bloque: unidad mínima de transferencia entre los dos niveles Acierto (hit): el dato solicitado está en el nivel i Tasa de aciertos (hit ratio): la fracción de accesos encontrados en el nivel i Tiempo de acierto: tiempo de acceso del nivel i + tiempo detección de acierto Fallo (miss): el dato solicitado no está en el nivel i y es necesario buscarlo en el nivel i+1 Tasa de fallos (miss ratio): 1 - (Tasa de aciertos) Tiempo de penalización por fallo: tiempo de sustitución de un bloque del nivel i + tiempo de acceso al dato Tiempo de acierto << Penalización de fallo Memoria nivel inferior Al procesador Memoria nivel superior Blk X Del procesador Blk Y

El problema Introducción 50% por año Gap memoria -procesador 9% por año La demanda de anchura de banda con memoria crece. Segmentación, ILP Ejecución especulativa 1980 no caches “on chip”, 2007 2-3 niveles de cache “on chip” No tienen valor en sí mismas. Solo para el reducir el gap

El problema: Algunos datos Introducción El problema: Algunos datos Tamaño de la cache Del 50 al 75 % del área. Más del 80% de los transistores PentiumIII Itaniun 2 Madison Tiempo de servicio de un fallo de cache: evolución 21064 (200Mhz) 340ns, 340/5=68 ciclos, 68x2= 136 instrucciones 21164 (300Mhz) 266ns, 266/3.3=80, 80x4=320 instrucciones 21264 (1Ghz) 180ns, 180/1=180, 180x6=1080 instrucciones Latencia: 1ciclo ( Itanium2) a 3 ciclos Power4-5

El problema Introducción Tamaño de la cache Del 50 al 75 % del área. Más del 80% de los transistores Montecito 1700Mtrans Pentium 4

La más simple: Emplazamiento directo Repaso de conceptos básicos La más simple: Emplazamiento directo Dirección Memoria Cache directa de 4 Bytes 1 Cache Index 2 3 1 4 2 5 3 6 7 La posición 0 de la cache almacenara los datos de: Posiciones de memoria 0, 4, 8, ... etc. En general: Cualquier posición de memoria cuyos 2 LSBs de la dirección sean 0s Dirección<1:0> => cache index ¿Cuando se debe llevar una información a la cache? ¿ Como localizar la información en la cache ? 8 9 A Let’s look at the simplest cache one can build. A direct mapped cache that only has 4 bytes. In this direct mapped cache with only 4 bytes, location 0 of the cache can be occupied by data form memory location 0, 4, 8, C, ... and so on. While location 1 of the cache can be occupied by data from memory location 1, 5, 9, ... etc. So in general, the cache location where a memory location can map to is uniquely determined by the 2 least significant bits of the address (Cache Index). For example here, any memory location whose two least significant bits of the address are 0s can go to cache location zero. With so many memory locations to chose from, which one should we place in the cache? Of course, the one we have read or write most recently because by the principle of temporal locality, the one we just touch is most likely to be the one we will need again soon. Of all the possible memory locations that can be placed in cache Location 0, how can we tell which one is in the cache? +2 = 22 min. (Y:02) B C D E F

Cache directa de 1 KB, 32Bytes por bloque Repaso de conceptos básicos Cache directa de 1 KB, 32Bytes por bloque Para una cache de 2N con dirección de 32bits: Los (32 - N) bits más significativos son el Tag Los M bits menos significativos son el selector de bytes (Tamaño de bloque = 2M) 31 9 4 Cache Tag Example: 0x50 Cache Index Byte Select Ex: 0x01 Ex: 0x00 Valid Bit Cache Tag Cache Data : Byte 31 Byte 1 Byte 0 : 0x50 Byte 63 Byte 33 Byte 32 1 Let’s use a specific example with realistic numbers: assume we have a 1 KB direct mapped cache with block size equals to 32 bytes. In other words, each block associated with the cache tag will have 32 bytes in it (Row 1). With Block Size equals to 32 bytes, the 5 least significant bits of the address will be used as byte select within the cache block. Since the cache size is 1K byte, the upper 32 minus 10 bits, or 22 bits of the address will be stored as cache tag. The rest of the address bits in the middle, that is bit 5 through 9, will be used as Cache Index to select the proper cache entry. +2 = 30 min. (Y:10) 2 3 : : : : Byte 1023 Byte 992 31

Asociativa por conjuntos Repaso de conceptos básicos Asociativa por conjuntos N-way asociativa : N entradas por conjunto N caches directas operando en paralelo (N típico 2 , 4) Ejemplo: 2-way cache asociativa Cache Index selecciona un conjunto de la cache Los dos tags en el conjunto son comparados en paralelo Se selecciona el dato en función de la comparación Cache Index Valid Cache Tag Cache Data Cache Data Cache Block 0 Cache Tag Valid : Cache Block 0 : : : This is called a 2-way set associative cache because there are two cache entries for each cache index. Essentially, you have two direct mapped cache works in parallel. This is how it works: the cache index selects a set from the cache. The two tags in the set are compared in parallel with the upper bits of the memory address. If neither tag matches the incoming address tag, we have a cache miss. Otherwise, we have a cache hit and we will select the data on the side where the tag matches occur. This is simple enough. What is its disadvantages? +1 = 36 min. (Y:16) Compare Adr Tag Compare 1 Sel1 Mux Sel0 OR Cache Block Hit

Repaso de conceptos básicos Comparación Asociativa por conjuntos “versus” Directa N comparadores vs. 1 Retardo extra por el MUX para los datos El dato llega después del hit del acceso En una directa, el bloque de cache es accesible antes del hit: Es posible asumir un acierto y continuar. Recuperación si fallo. Cache Data Cache Block 0 Cache Tag Valid : Cache Index Mux 1 Sel1 Sel0 Cache Block Compare Adr Tag OR Hit First of all, a N-way set associative cache will need N comparators instead of just one comparator (use the right side of the diagram for direct mapped cache). A N-way set associative cache will also be slower than a direct mapped cache because of this extra multiplexer delay. Finally, for a N-way set associative cache, the data will be available AFTER the hit/miss signal becomes valid because the hit/mis is needed to control the data MUX. For a direct mapped cache, that is everything before the MUX on the right or left side, the cache block will be available BEFORE the hit/miss signal (AND gate output) because the data does not have to go through the comparator. This can be an important consideration because the processor can now go ahead and use the data without knowing if it is a Hit or Miss. Just assume it is a hit. Since cache hit rate is in the upper 90% range, you will be ahead of the game 90% of the time and for those 10% of the time that you are wrong, just make sure you can recover. You cannot play this speculation game with a N-way set-associatvie cache because as I said earlier, the data will not be available to you until the hit/miss signal is valid. +2 = 38 min. (Y:18)

Política de actualización :Write-Through vs Write-Back Repaso de conceptos básicos Política de actualización :Write-Through vs Write-Back Write-through: Todas las escrituras actualizan la cache y la memoria Se puede eliminar la copia de cache – Lo datos estan en la memoria Bit de control en la cache: Solo un bit de validez Write-back: Todas las escrituras actualizan solo la cache No se pueden eliminar los datos de la cache - Deben ser escritos primero en la memoria Bit de control: Bit de validez y bit de sucio Comparación: Write-through: Memoria ( Y otros lectores ) siempre tienen el último valor Control simple Write-back: Mucho menor AB, escrituras múltiples en bloque Mejor tolerancia a la alta latencia de la memoria Política de actualización :Asignación o no en fallo de escritura

Rendimiento 4 aspectos fundamentales Rendimiento de la cache Ubicación de un bloque(línea) Emplazamiento directo, asociativo, asociativo por conjuntos Acceso al bloque: uso del índice Tag y bloque(línea) Reemplazamiento del bloque(línea) Aleatorio, LRU Estrategia de escritura Post-escritura( write back), escritura directa ( write through) Tiempo CPU = ( Ciclos CPU + Ciclos de espera memoria)x Tc Ciclos de espera memoria= Accesos a memoria x Tasa de fallos x Tiempo de penalización de fallo Multiplicando y dividiendo por Nº de instr Tiempo CPU = Nº de instr. x (CPI+accesos por inst x Tasa de fallos x penalización de fallo) x Tc Rendimiento de la cache

¿ Como mejorar el rendimiento de la cache Rendimiento: Mejora ¿ Como mejorar el rendimiento de la cache Reducir la penalización del fallo Reducir la tasa de fallos Reducir el tiempo de acceso a la cache Tipos de fallos (3 C´s) Tasa de fallos por tipo (Average SPEC92) Tamaño, asociatividad Iniciales(Compulsory): Fallos incluso en cache infinita Localidad espacial Capacidad: Tamaño de la cache Localidad temporal Conflicto: Política de emplazamiento

Reducir la tasa de fallos Cambiando el tamaño del bloque Tasa de fallos Tamaño de bloque 1 palabra Mc Disminución de la tasa de fallos de inicio (captura mejor la localidad espacial ) Aumento de la tasa de fallos de capacidad (menor Nº Bloques => captura peor localidad temporal) Reduce fallos iniciales Observaciones: Valor óptimo mayor según aumenta Mc Caches integradas tamaño y bloque fijo Caches externas tamaño y bloque variable Aumenta fallos De capacidad Miss rate (%) Tamaño bloque Tamaño cache Penalización Tamaño de bloque 1 palabra Mc Bloque del sig. nivel => Tecnología y organización del siguiente nivel

Reducir la tasa de fallos Cambiando la asociatividad Tasa de fallos Asociativo Directo Asociativo por conjuntos E 1 M Disminución de la tasa de fallos de conflicto (más marcos posibles) Regla 2:1 Cache directa= 2way de mitad de tamaño 8 way es igual a totalmente asociativa Tiempo de acceso Observaciones: 1. Mejora menor según aumenta el tamaño Mc - Aumenta el número de conjuntos 2. Mejora menor según aumenta asociatividad Tiempo de acceso Coste hardware Asociativo Directo Asociativo por conjuntos E 1 M Número de comparadores => tecnología

Reducir la tasa de fallos Algoritmo de reemplazamiento Espacio de reemplazamiento Directo: Trivial Asociativo: Toda la cache Asociativo por conjuntos: Los marcos de un conjunto Algoritmos Aleatorio: El bloque reemplazado se escoge aleatoriamente LRU (Least Recented Used): Se reemplaza el bloque menos recientemente usado - Gestión: pila - Implementación: registros de edad, implementación de la pila y matriz de referencias - Para un grado de mayor que 4, muy costoso en tiempo y almacenamiento (actualiz.> tcache) LRU aproximado: Algoritmo LRU en grupos y dentro del grupo 2 1 3 ACIERTO REEMPLAZ.

Reducir la tasa de fallos Algoritmo de reemplazamiento Influencia del algoritmo de reemplazamiento Tasa de fallos ALEATORIO Reemplazamiento LRU Disminuye la tasa de fallos de capacidad (mejora la localidad temporal) Grado 2 Grado 4 Grado 8 LRU AleatorioLRU AleatorioLRU Aleatorio 16 KB 5,18% 5,69% 4,67% 5,29% 4,39% 4,96% 64 KB 1,88% 2,01% 1,54% 1,66% 1,39% 1,53% 256 KB 1,15% 1,17% 1,13% 1,13% 1,12% 1,12% Observaciones: 1. La diferencia disminuye al aumentar Mc 2. La diferencia aumenta con el grado de asociatividad E Tiempo de acceso Coste hardware Reemplazamiento ALEATORIO LRU

Reducir la tasa de fallos Cache de víctimas Memoria cache más pequeña totalmente asociativa asociada a la memoria cache => Contiene los bloques que han sido sustituidos más recientemente => En un fallo primero comprueba si el bloque se encuentra en la cache víctima Baja la tasa de fallos de conflicto en caches con emplazamiento directo - Cuanto menor es la memoria cache más efectiva es la cache víctima - En una cache de 4KB con emplazamiento directo, una cache víctima de 4 bloques elimina del 20% al 95% de los fallos, según programa. Ejemplo: - HP 7200, 2 KB internos: 64 bloques de 32 bytes ALPHA, Power 4-5-6, AMD Quad, ( diferente uso) CPU registros

Reducir la tasa de fallos Cache pseudo-asociativas Trata de combinar las ventaja de la cache directa y la asociativa Memoria cache de emplazamiento directo: => En un fallo busca el bloque en otro marco dado por la inversión del bit MS del índice de marco B PAL Bloque: 0 (0000000) 9 ETIQUETA PAL MB Marcos: 0 (0000000); 2 (0000010) 5 2 2 Hit Time Pseudo Hit Time Miss Penalty Time Dos tiempos de acceso a cache => Gestión por parte del procesador Más útiles en cache “off chip” (L2) Ejemplos: R10000 L2, UltraSparc L2

Reducir la tasa de fallos Cache pseudo-asociativas •Cachéde correspondencia directa con una modificación para que se comporte como asociativas. •Se permite que un bloque de Mpse pueda ubicar en dos (pseudoasociativade 2 vías) marcos de Mc: •el que le corresponde (por la correspondencia directa) •el que resulta de conmutar el bit más significativo de la dirección del bloque

Reducir la tasa de fallos Cache con prebúsqueda Idea Ocultar la latencia de un fallo de cache solapándolo con otras instrucciones independientes PREBUSCAR: Caches con prebusqueda ADD R5,R6,R6 ………………….. LD R1, dir Anticipa los fallos de Cache anticipando las búsquedas antes de que el procesador demande el dato Solapa acceso a los datos con instrucciones anteriores a la que usa el dato No se relaciona con los registros. No genera riesgos Posibilidad de búsquedas innecesarias Dos tipos Prebusqueda SW Prebusqueda HW

Reducir la tasa de fallos Cache con prebusqueda Prebusqueda SW Instrucciones especiales de prebusqueda introducidas por el compilador La eficiencia depende del compilador y del tipo de programa Prebusqueda con destino cache (MIPS IV, PowerPC, SPARC v. 9), o registro ( HP-PA) Instrucciones de prebusqueda no producen excepciones. Es una forma de especulación. Funciona bien con bucles y pattern de acceso a array simples. Aplicaciones de cálculo Funciona mal con aplicaciones enteras que presentan un amplio reúso de Cache Overhead por las nuevas instrucciones. Más búsquedas. Más ocupación de memoria

Reducir la tasa de fallos Cache con prebúsqueda (ejemplo) Cache 8 KB directa, bloque:16 bytes, write-back (con asignación en escritura) Datos: a(3,100), b(101,3). Elemento arrays = 8 bytes. Cache inicialmente vacía. Ordenación en memoria: por filas 1 bloque cache = 2 palabras (elementos) Programa (sin prebúsqueda): for (i:=0; i<3; i:=i+1) for (j:=0; j<100; j:=j+1) a[i][j] := b[j][0] * b[j+1][0] Fallos Acceso a elementos de “a”: Se escriben y acceden en cache tal como están almacenados en memoria. Cada acceso a memoria proporciona dos palabras (beneficio de localidad espacial). Fallos “a” = (3x100)/2 = 150 Acceso a elementos de “b” (si ignoramos fallos de conflicto): Un fallo por cada valor de j cuando i=0 => 101 fallos. Para los restantes valores de i, los elementos de b ya están en la cache. Total fallos: 150+101 = 251

Prebúsqueda de instrucciones y datos •La prebúsqueda de instrucciones y datos antes de ser demandados disminuye la tasa de fallos. •Las instrucciones o datos prebuscadosson llevados directamente a la cachéo a un buffer externo •El Alpha AXP 21064 prebuscados bloques cuando ocurre un fallo, el que contiene la palabra causante del fallo y el siguiente. El primero lo coloca en MCy el segundo en el buffer de prebúsqueda •Experimentalmente se ha comprobado que un buffer de prebúsqueda simple elimina el 25 % de los fallos de una cachéde datos con correspondencia directa de 4 KB

Reducir la tasa de fallos Cache con prebúsqueda (ejemplo) Suposición: La penalización por fallo es de tal duración que se necesita iniciar la prebúsqueda 7 iteraciones antes. Idea: partir bucle /* para i=0 (prebusca a y b) */ for (j:=0; j<100; j:=j+1) { prefetch (b[j+7][0]); /* b[j][0] para 7 iteraciones más tarde */ prefetch (a[0][j+7]); /* a[0][j] para 7 iteraciones más tarde */ a[0][j] := b[j][0] * b[j+1][0] ; } /* para i=1,2 (prebusca sólo a, ya que b ya está en cache) */ for (i:=1; i<3; i:=i+1) prefetch (a[i][j+7]); /* a[i][j] para 7 iteraciones más tarde */ a[i][j] := b[j][0] * b[j+1][0] ; } Total fallos 3 * 7/2 + 7 = 19 fallos Instrucciones extra (los prefetch): 100*2 + 200*1 = 400 Fallos evitados = 251 -19 = 232 Fallos: 7/2 Fallos: 7 Fallos: 2 * 7/2 (para i=1,2)

Reducir la tasa de fallos Cache con prebusqueda Prebusqueda HW Prebusqueda secuencial de un bloque adicional Tipos Prebusqueda sobre fallo Prebusca el bloque b+1 si el acceso b produce un fallo Prebusqueda marcada Se incluye un tag en cada bloque. Si un bloque marcado es buscado o prebuscado el siguiente se prebusca. Sigue bien la localidad espacial Prebusqueda adaptativa El grado de prebusqueda ( numero de bloques prebuscados) se ajusta en función del comportamiento Prebusqueda con “stride” arbitrario

Reducir la tasa de fallos Cache con prebusqueda Comparación HP 7200 Prebusqueda HW - HP8000 Prebusqueda SW Implementacion Rendimiento Relativo Estado de los bloques prebuscados (stream buffer) Bloque prebuscado pasa a buffer Al ser referenciado pasa a Cache Alpha busca dos bloques en fallo

Reducir la tasa de fallos Compilador: Optimización de código Ejemplo: DEC Alpha 21064: Mc de 8 KB, E = 1, M = 256( numero de bloques), Bloque = 4 palabras de 64 bits (32 bytes) - Cada 1024 palabras se repite la asignación de marcos de bloques. 1) Fusión de arrays: Mejora la localidad espacial para disminuir los fallos de conflicto - Colocar las mismas posiciones de diferentes arrays en posiciones contiguas de memoria double A[1024]; double B[1024]; for (i = 0; i < 1024; i = i + 1) C = C + (A[i] + B[i]); A[0:3] B[0:3] struct fusion{ double A; double B; } array[1024]; for (i = 0; i < 1024; i = i + 1 C = C + (array[i].A + array[i].B); A,B[0:1] A[4:7] B[4:7] A,B[2:3] A[8:11] B[8:11] A,B[4:5] A[12:15] B[12:15] A,B[510:511] A,B[512:513] A[1016:1019] B[1016:1019] 2x1024 fallos 2x256 de inicio 1536 de conflicto A[1020:1023] B[1020:1023] A,B[510:511] 1024/2 fallos 2x256 de inicio Ganancia: 4

Reducir la tasa de fallos Compilador: Optimización de código 2) Alargamiento de arrays: Mejora la localidad espacial para disminuir los fallos de conflicto - Impedir que en cada iteración del bucle se compita por el mismo marco de bloque double A[1024]; double B[1024]; for (i=0; i < 1024; i=i +1) C = C + (A[i] + B[i]); A[0:3] B[0:3] double A[1028]; double B[1024]; for (i=0; i < 1024; i=i+1) C = C + (A[i] + B[i]); A[0:3] A[1024:1027] A[4:7] B[4:7] A[4:7] B[0:3] A[8:11] B[8:11] A[8:11] B[4:7] A[12:15] B[12:15] A[12:15] B[8:11] 2x1024 fallos 512 de inicio 1536 de conflicto 1024/2 fallos 512 de inicio A[1016:1019] B[1016:1019] B[1016:1019] Ganancia: 4 A[1016:1019] B[1012:1015] A[1020:1023] B[1020:1023] B[1020:1023] A[1020:1023] A[1016:1019] 3) Intercambio de bucles: Mejora la localidad espacial para disminuir los fallos de conflicto - En lenguaje C las matrices se almacenan por filas, luego se debe variar en el bucle interno la columna double A[128][128]; for (j=0; j < 128; j=j+1) for (i=0; i < 128;i=i+1) C = C * A[i][j]; double A[128][128]; for (i=0; i < 128;i=i+1) for (j=0; j < 128; j=j+1) C = C * A[i][j]; A[0][0:3] A[8][0:3] A[120][0:3] A[0][4:7] A[8][4:7] A[120][4:7] A[0][8:11] A[8][8:11] A[120][8:11] A[0][12:15] A[8][12:15] A[120][12:15] 128x128 fallos 16x256 de inicio 12288 de conflicto 128x128/4 fallos 16x256 de inicio Ganancia: 4 A[7][120:123]v A[15][120:123] A[127][120:123] A[7]124:127] A[15][124:127] A[127][124:127]

Reducir la tasa de fallos Compilador: Optimización de código 4) Fusión de bucles: Mejora la localidad temporal para disminuir los fallos de capacidad - Fusionar los bucles que usen los mismos arrays para usar los datos que se encuentran en cache antes de desecharlos double A[64][64]; double A[64][64]; for (i=0; i < 64; i=i+1) for (i=0; i < 64;i=i+1) for (j=0; j < 64;j=j+1) for (j=0; j < 64;j=j+1) C = C * A[i][j]; { C = C * A[i][j]; for (i=0; i < 64;i=i+1) D = D + A[i][j]; for (j=0; j < 64;j=j+1) } D = D + A[i][j]; A[0][0:3] A[16][0:3] A[32][0:3] A[48][0:3] A[0][4:7] A[16][4:7] A[32][4:7] A[48][4:7] A[0][8:11] A[16][8:11] A[32][8:11] A[48][8:11] A[0][12:15] A[16][12:15] A[32][12:15] A[48][12:15] A[15][56:59] A[31][56:59] A[47][56:59] A[63][56:59] A[15]60:63] A[31][60:63] A[47]60:63] A[63][60:63] (64x64/4)x2 fallos 4x256 de inicio 4x256 de capacidad 64x64/4 fallos 4x256 de inicio Ganancia: 2

Reducir la tasa de fallos Compilador: Optimización de código 5) Calculo por bloques( Blocking): Mejora la localidad temporal para disminuir los fallos de capacidad /* Antes */ for (i=0; i < N; i=i+1) for (j=0; j < N; j=j+1) {r = 0; for (k=0; k < N; k=k+1){ r = r + y[i][k]*z[k][j];}; x[i][j] = r; }; Dos bucles internos: Lee todos los NxN elementos de z Lee N elementos de 1 fila y en cada iteración Escribe N elementos de 1 fila de x Fallos de capacidad dependen de N y Tamaño de la cache: Idea: calcular por submatrices BxB que permita la cache antes Después

Reducir la tasa de fallos Compilador: Optimización de código 5) Calculo por bloques( Blocking): Mejora la localidad temporal para disminuir los fallos de capacidad Mejora de rendimiento /* Despues */ for (jj=0;jj < N; jj=jj+B) for (kk=0;kk < N; kk=kk+B) for (i=0; i < N; i=i+1) for (j=jj;j < min(jj+B-1,N);j=j+1) {r = 0; for (k=kk;k < min(kk+B-1,N);k=k+1){ r = r + y[i][k]*z[k][j];}; x[i][j] = x[i][j]+r; }; B Factor de bloque (Blocking Factor)

Reducir la tasa de fallos Ejemplo: Producto de matrices 6x6 (sin blocking) X Y Z j k j k i i  i = 0, j = 0, k = 0..5 X ij = ∑ Yik Zkj k i = 0, j = 1..5 , k = 0..5 Al procesar la 2ª fila de Y (i=1) se necesita de nuevo 1ª col de Z: ¿Está todavía en la cache? Cache insuficiente provoca múltiples fallos sobre los mismos datos

Reducir la tasa de fallos Ejemplo “blocking”: Con Blocking (B=3) X Y Z j k j k i i  i = 0, j = 0, k = 0..2 Evidentemente, los elementos de X no están completamente calculados i = 0, j = 1..2 , k = 0..2

Reducir la tasa de fallos Ejemplo “blocking”: Con Blocking (B=3) X Y Z j k j k i i  i = 1, j = 0, k = 0..2 Idea: Procesar el bloque 3x3 de Z antes de quitarlo de la cache i = 1, j = 1..2 , k = 0..2

Reducir la tasa de fallos Con Blocking (B=3). Algunos pasos después... X Y Z j k j k i i  i = 0, j = 0, k = 3..5 Y ya empezamos a tener elementos de X completamente calculados! i = 0, j = 1..2 , k = 3..5

Reducir la tasa de fallos Resumen 1) Tamaño del bloque 2) Asociatividad 3) Algoritmo de reemplazamiento 4) Cache de víctimas 5) Cache pseudo-asociativas 6) Cache con prebusqueda 7) Compilador: Optimización de código ¿ Como mejorar el rendimiento de la cache Reducir la tasa de fallos Reducir la penalización del fallo Reducir el tiempo de acceso a la cache

Política de actualización :Write-Through vs Write-Back Recordatorio Política de actualización :Write-Through vs Write-Back Write-through: Todas las escrituras actualizan la cache y la memoria Se puede eliminar la copia de cache – Lo datos estan en la memoria Bit de control en la cache: Solo un bit de validez Write-back: Todas las escrituras actualizan solo la cache No se pueden eliminar los datos de la cache - Deben ser escritos primero en la memoria Bit de control: Bit de validez y bit de sucio Comparación: Write-through: Memoria ( Y otros lectores ) siempre tienen el último valor Control simple Write-back: Mucho menor AB, escrituras múltiples en bloque Mejor tolerancia a la alta latencia de la memoria Política de actualización :Asignación o no en fallo de escritura

Reducir la penalización del fallo Dar prioridad a la lecturas sobre las escrituras Con escritura directa ( write through). Buffer de escrituras. Check buffer si no hay conflicto prioridad lecturas Con post-escritura. Buffer para bloque sucio y leer primero bloque en fallo Reemplazamiento de subbloques No reemplazar el bloque completo sobre un fallo Localidad y tamaño ( Usado también para reducir almacenamiento de “tags” Bits de validez

Reducir la penalización del fallo Envío directo de la palabra solicitada al procesador Carga anticipada ( early restart ): Cuando la palabra solicitada se carga en memoria cache se envía al procesador Primero la palabra solicitada ( critical word first ): Primero se lleva al procesador y a memoria cache la palabra solicitada El resto del bloque se carga en memoria cache en los siguientes ciclos Su eficiencia depende del tamaño del bloque . Util con bloques grandes => para bloques pequeños la ganancia es muy pequeña Problema: localidad espacial, después la siguiente palabra

Reducir la penalización del fallo Cache sin bloqueo ( non-blocking, lockup-free ) Idea Ocultar la latencia de un fallo de cache solapandolo con otras instrucciones independientes ADD R5,R6,R6 ………………….. LD R1, dir ADD R4,R4,R1 PREBUSCAR: Caches con prebusqueda NO BLOQUEAR: Cache que no bloquean

Reducir la penalización del fallo Cache sin bloqueo ( non-blocking, lockup-free ) Permite que la ejecución siga aunque se produzca un fallo mientras ni se necesite el dato Un fallo sin servir. Sigue ejecutando y proporcionando datos que están en cache HP7100, Alpha 21064 Múltiples fallos sin servir. R12000 (4) , Alpha21264 (8), HP8500 (10), PentiumIII y 4 ( 4) Los beneficios dependen de la planificación de instrucciones Requiere interfase de memoria más complejo ( múltiples bancos ) La CPU para cuando necesita dato CPU Memoria CPU CPU Fallo La CPU para hasta tener el dato Memoria Memoria CPU CPU Memoria Memoria Fallos Fallo Acierto

Reducir la penalización del fallo Cache sin bloqueo ( non-blocking, lockup-free ) Hay que asociar un registro a la petición cuando se inicia un load sin bloqueo LD R1,dir Información necesaria en el control de la función Dirección del bloque que produce el fallo Entrada de la Cache para el bloque Ítem en el bloque que produce el fallo Registro donde se almacena el dato Implementación (MSHR Miss Status Holding Register): Fallo primario Fallo secundario Estructura del MSHR para bloque de 32 byte, palabra 8 bytes (Solo un fallo por palabra) Bit valido Bit valido Dirección bloque Destino Formato Palabra 0 Bit valido Destino Formato Palabra 1 Bit valido Destino Formato Palabra 2 Comparador Bit valido Destino Formato Palabra 3

Reducir la penalización del fallo Cache sin bloqueo ( non-blocking, lockup-free ) FC nº de fallos MF múltiples fallos y nº de búsquedas AE actualización en escritura

Reducir la penalización del fallo Cache multinivel ( L2,L3,…) Más grande, más rapida  Dos niveles de cache L2 Tiempo de acceso medio a memoria (TAMA) TAMA = Hit TimeL1 + Miss RateL1 x Miss PenaltyL1 Miss PenaltyL1 = Hit TimeL2 + Miss RateL2 x Miss PenaltyL2 TAMA = Hit TimeL1 + Miss RateL1 x (Hit TimeL2 + Miss RateL2 +Miss PenaltyL2 Definiciones: Tasa de fallos local— fallos en esta cache dividido por el numero total de accesos a esta cache (Miss rateL2) Tasa de fallos global —fallos en esta cache dividido por el numero total de accesos a memoria generados por el procesador La tasa de fallos global es lo importante - L1: Afecta directamente al procesador=> Acceder a un dato en el ciclo del procesador - L2: Afecta a la penalización de L1 => Reducción del tiempo medio de acceso

Reducir la penalización del fallo Cache multinivel ( L2,L3,…) Cache L1 32Kbytes, cache L2 diferentes tamaños Tasa de fallos local no es una medida El tiempo de acceso de L2 solo afecta al tiempo de penalización Tamaño de L2>>L1 Reducción de fallos en L2 igual que L1 asociatividad, tamaño de bloque,.. Costo Local L2 global

Reducir la penalización del fallo 1) Dar prioridad a la lecturas sobre las escrituras 2) Reemplazamiento de subbloques 3) Envío directo de la palabra solicitada al procesador 4) Cache sin bloqueo ( non-blocking, lockup-free ) 5) Cache multinivel ( L2,L3,…) ¿ Como mejorar el rendimiento de la cache Reducir la tasa de fallos Reducir la penalización del fallo Reducir el tiempo de acceso a la cache

Reducir el tiempo de acceso Caches simples y pequeñas Pequeña para que: Se pueda integrar junto al procesador evitando la penalización en tiempo del acceso al exterior Tiempo de propagación versus tiempo de ciclo del procesador Simple (grado de asociatividad pequeño) => solapamiento y tiempos de acceso menores Identificación+Comparación+Lectura ETIQUETA PAL MB ACIERTO 1 2 3 Datos Etiqueta V DATO MULTIPLE COMPARA B 5 9 ETIQUETA PAL NC 1 Datos Etiqueta V DATO MULTIPLE B 6 2 9 { ACIERTO COMPARA Directo Asociativo por conjuntos

Reducir el tiempo de acceso Cache de direcciones virtuales ( evita espera TLB ) Acceder a la cache con la dirección virtual Al cambio de contexto borrar la cache. Falsos aciertos Costo = tiempo de borrado ( flush) + fallos iniciales No borrado, problema de sinónimos Dos direcciones virtuales apuntan la misma dirección física Solución a los sinónimos y borrado Añadir un identificador de proceso a cada bloque de cache. CPU $ TLB MEM DV DF Cache de Direcciones virtuales Tags CPU TLB $ MEM DV DF Cache Convencional

Reducir el tiempo de acceso Caches virtualmente accedidas físicamente marcadas (evita espera TLB ) Numero de pagina Etiqueta Desplazamiento Marco de bloque Palabra A B C Marco bloq. Palabra NUMERO DE PÁGINA offset página Dirección virtual Marco de página PÁGINA TLB A= B + C Dirección física Etiqueta Se solapa la traducción del numero de pagina con el acceso a los tag del marco de bloque Limita el tamaño de la cache al tamaño de pagina Un modo de aumentar el tamaño máximo de la cache es aumentar la asociatividad

Reducir el tiempo de acceso Segmentar escrituras Las operaciones de escrituras más lentas ( se escribe después de chequear el tag) Se segmenta el acceso: 1º se chequea el tag, 2º se actualiza el dato Un write chequea el tag, el anterior esta escribiendo el dato en la cache ( Latencia de escrituras) Los accesos de escritura deben usar el Delayed Write Buffer

Caches Resumen Técnica TF PF TA Complejidad Tamaño grande del bloque + – 0 Alta asociatividad + – 1 Cache de victimas + 2 Caches pseudo-Asociativas + 2 Prebusqueda Hw + 2 Prebusqueda Sw compilador + 3 Optimizaciones del compilador + 0 Prioridad de lecturas + 1 Reemplazamiento de subbloques + + 1 Early Restart & Critical Word 1st + 2 Caches Non-Blocking + 3 Caches L2 + 2 Caches pequeñas y sencillas – + 0 Evitar/solapar traducción de Dir. + 2 Segmentar escrituras + 1 Tasa de fallo Penalización de fallo Tiempo acceso

El problema Caches Resumen 1960-1985 rendimiento función de nº de operaciones 1990’s Ejecución segmentada, superescalar, fuera de orden, especulación,.. 1999 rendimiento función de accesos fuera de la cache ¿ Que Implica? Compiladores, SO, Algoritmos, estructuras de datos,...

Memoria Conceptos básicos Rendimiento Latencia: Penalización del fallo Tiempo de acceso : tiempo entre la petición y la llegada del dato Tiempo de ciclo : tiempo entre peticiones sucesivas Ancho de Banda: Penalización de fallo de bloques grandes (L2) Construida con DRAM: Dynamic Random Access Memory (2007 2Gb) Necesita ser refrescada periódicamente (2 a 8 ms, 1% tiempo) Direccionamiento en dos fases (El chip es una matriz de celdas 2D): RAS : Row Access Strobe CAS : Column Access Strobe Tiempo ciclo doble tiempo de acceso( 2000; 40ns acceso 90ns ciclo) Cache usan SRAM: Static Random Access Memory (2007 64Mb) No necesitan refresco Tamaño: 4-6 transistores/bit vs. 1 transistor Capacidad: DRAM/SRAM ­ 4-8, Costo: SRAM/DRAM ­ 8-16 Tiempo de acceso: SRAM/DRAM ­ 8-16

BUS Y MEMORIA DE 4 PALABRAS BUS Y MEMORIA DE 1 PALABRA Memoria principal Aumentar el ancho de banda con memoria Aumento del ancho de banda en la transferencia de un bloque manteniendo la misma latencia - DRAM: 1 ciclo en enviar la dirección, 10 ciclos en el acceso y 1 ciclo en el envío del dato, tamaño de palabra 32bits. - Cache: Bloques de tamaño 4 palabras de 4 bytes BUS Y MEMORIA DE 4 PALABRAS ACCESO SECUENCIAL (256,512) 1+1x(10+1)=12 => 1,33 bytes/ciclo CPU Cache Memoria MULTIPLEXOR CPU Cache Memoria BUS Y MEMORIA DE 1 PALABRA ACCESO SECUENCIAL 1+4x(10+1)=45 => 0,35 bytes/ciclo Coste del bus Time Access Time Cycle Time

Memoria principal Aumentar el ancho de banda con memoria Aumento del ancho de banda en la transferencia de un bloque manteniendo la misma latencia - DRAM: 1 ciclo en enviar la dirección, 10 ciclos en el acceso y 1 ciclo en el envío del dato, tamaño de palabra 32bits. - Cache: Bloques de tamaño 4 palabras de 4 bytes ENTRELAZAMIENTO Orden alto Orden bajo Access Bank 0 Access Bank 1 Access Bank 2 Access Bank 3 We can Access Bank 0 again CPU M0 Cache M1 M2 M3 ANCHURA DE BUS DE 1 PALABRA ANCHURA DE MEMORIA DE 4 PALABRAS ACCESO SOLAPADO A LOS MÓDULOS 1+(10+4)x1=15 => 1 byte/ciclo Muy buena relación coste/rendimiento Funciona bien con accesos secuenciales.( Reemplazamiento de un bloque) No soluciona el problema de accesos independientes

Desplazamiento superbanco Memoria principal Aumentar el ancho de banda con memoria Distribución de direcciones con entrelazamiento de orden bajo 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 Banco 0 Banco 1 Banco 2 Banco 3 DIR 2 bits 2 bits Despla Banco Accesos independientes a cada banco ( caches que no bloquean ) Cada banco necesita interfase con el sistema. Controlador, buses separados de direcciones y datos Mezclar los tipos de entrelazamiento (entrelazamiento mixto) Numero de superbanco Desplazamiento superbanco Desplazamiento Numero de banco 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Superbanco 0 Banco Ejemplo: 4 accesos independientes Cada acceso dos palabras 0 a 3 (2bits) 0 a 1 (1bit) 0 a 1 (1bit)

Visión global Alpha 21064 CACHE de primer nivel L1 Tamaño: 8 KB datos y 8 KB de instrucciones (solo lectura) Tamaño del bloque: 32 bytes (4 palabras de 64 bits) Número de bloques: 256 Política de emplazamiento: Directo Política de reemplazamiento: Trivial Política de actualización: Escritura directa 1. Dirección física de 34 bits (división en campos) - MS: cacheable o E/S (no cacheable) 2. Selección de marco de bloque por el índice 3. Comparación y lectura simultánea 4. Informar que el dato está listo en cache En caso de fallo 4. Indica al procesador que espere 5. Lectura del bloque desde siguiente nivel (Mp o L2)

Visión global Alpha 21064 División de memorias cache TLB asociativo Solapamiento de comparación y la lectura Solapamiento de escrituras consecutivas Prebúsqueda hw de instrucciones (1 bloque) Buffer de escritura de 4 bloques 2 MB L2 de cache de emplazamiento directo con cache víctima de 1 bloque 256 bit a memoria

Visión global Alpha 21064 =? =? =? =? =? address <30> offset<13> CPU address <30> offset<13> PC Instruction <64> Data Out <64> Data in <64> Tag<30> marco<21> Tag<30> marco<21> <64> <64> <64> DTLB ITLB Buffer de escritura retrasada <21> <21> Index8 offset5 Index8 Offset5 V Tag<21> Data<64> V Tag<21> Data<64> ICACHE DCACHE =? =? <29> Tag <29> Data <256> Tag <29> Data <256> <29> =? =? Buffer de prebusqueda de instrucciones Buffer de escritura intermedia Tag<13> Index<16> Tag<13> Data<256> Main memory L2CACHE =? Buffer víctima Magnetic disk

2 ciclos Visión global Alpha 21064 Acierto de lectura primer nivel =? CPU pgvirtual <30> offset<13> address <30> offset<13> PC Instruction <64> Data Out <64> Data in <64> Tag<30> pgfisica<21> Tag<30> marco<21> <64> <64> <64> <21> <21> NM8 offset5 Index8 Offset5 V TagC<21> Data<64> V Tag<21> Data<64> =? =? <29> <29> Tag <29> Data <256> Tag <29> Data <256> =? =? Pgfisica<21> Tag dir <21> 2 ciclos Tag<13> Index<16> Tag<13> Data<256> Main memory Acierto de lectura primer nivel =? Magnetic disk

Visión global Alpha 21064 8 bytes 2 ciclos 16+16 bytes 5+5 ciclos Data<256> =? Tag<13> Index<16> Main memory Tag<13> offset5 NM8 pgvirtual <30> Instruction <64> Data in <64> Data Out <64> pgfisica<21> Tag<30> <21> <64> <29> offset<13> Offset5 Index8 address <30> marco<21> PC CPU Tag <29> Data <256> V TagC<21> Data<64> Tag<21> Magnetic disk 8 bytes 2 ciclos 16+16 bytes 5+5 ciclos Lectura Acierto prebúsqueda Acierto segundo nivel

Visión global Alpha 21064 32 bytes 36 ciclos =? =? =? =? Lectura CPU pgvirtual <30> offset<13> address <30> offset<13> PC Instruction <64> Data Out <64> Data in <64> Tag<30> pgfisica<21> Tag<30> marco<21> <64> <64> <64> <21> <21> NM8 offset5 Index8 Offset5 V TagC<21> Data<64> V Tag<21> Data<64> =? =? <29> <29> Tag <29> Data <256> Tag <29> Data <256> =? 32 bytes 36 ciclos =? Tag<13> Index<16> Tag<13> Data<256> Main memory Lectura Fallo segundo nivel =? Magnetic disk

Visión global Alpha 21064 32 bytes 5+10 ciclos Data<256> =? Tag<13> Index<16> Main memory Tag<13> offset5 Index8 address <30> Instruction <64> Data in <64> Data Out <64> marco<21> Tag<30> <21> <64> <29> offset<13> Offset5 PC CPU Tag <29> Data <256> V Tag<21> Data<64> Magnetic disk 32 bytes 5+10 ciclos Siempre se escribe en 2º nivel Acierto nivel 2:Se sobreescribe Fallo nivel 2 Preferencia a la lectura

Visión global Alpha 21064 Rendimiento SPEC92 Tasa de fallos Specint: I$ miss = 2%,D$ miss = 13%, L2 miss = 0.6% Specfp: I$ miss = 1%, D$ miss = 21%, L2 miss = 0.3% WL comercial:I$ miss = 6%, D$ miss = 32%, L2 miss = 10%

Rendimiento CPI ideal 0.5 Visión global Alpha 21064 Parada en el lanzamiento de instrucciones saltos,dependencias Esperas de las diferentes caches Otros conflictos estructurales, registros,...

Visión global Alpha 21264 (ES40) CACHE de DATOS L1 Tamaño: 64KB datos , ASOCIATIVA 2 vias Tamaño del bloque: 64 bytes (8 palabras de 64 bits), 1024 bloques 1. Dirección virtual de 48 bits pasa a dirección física de 44 bits 2. Selección de marco de bloque por el índice 3. Comparación y lectura simultánea 4. Selección e informar que el dato está listo

Visión global Alpha 21264 (ES40) Caches L1 Cache de instrucciones acceso virtual Escritura directa Buffer de escritura intermedia para acelerar la escritura directa Buffer de escritura retrasada para segmentar las escrituras Buffer de prebúsqueda de un bloque de instrucciones Cache L2 Post-escritura Buffer víctima para dar preferencia a la lectura Directa 8Mb, 64 bytes bloque Critico primero (16) 15 ciclos 130 ciclos

Visión global Alpha 21264 (ES40) Rendimiento SPEC95 Fallos por1000 instrucciones y CPI para diferentes cargas de trabajo

Ejemplos IBM Power 5-6 Power 5 Power 6 L1 Instrucciones L1 Datos 64KB, directa, 128 bytes, read only 32KB, 2 ways, 128 bytes, write-throught 64KB, 4 ways, 128 bytes, read only 64KB, 8 ways, 128 bytes, write-throught L2 Compartida, 1,92MB, 10ways, 128 bytes, pseudoLRU, copy-back Propietaria de cada core, 4MB, 8ways, 128 bytes, pseudoLRU, copy-back L3 Off-chip Compartida, Victimas 36MB, 12 ways, 256 bytes, pseudoLRU 32MB, 16 ways, 128 bytes, pseudoLRU

Ejemplos Sun Niagara I-II Niagara I Niagara II L1 Instrucciones L1 Datos 16KB, 4 ways, 32 bytes, read only, aleatorio 8KB, 4 ways, 16 bytes, write-throught, aleatorio 16KB, 8 ways, 32bytes, read only, aleatorio 8KB, 8 ways, 16 bytes, write-throught, aleatorio L2 Compartida, 3MB, 12ways, 64 bytes, copy-back compartida, 4MB, 16ways, 64 bytes, copy-back

Ejemplos Intel CORE2 AMD Opteron Opteron Core 2 L1 Instrucciones L1 Datos 64KB, 2 ways, 64bytes, read only, LRU 64KB, 2 ways, 64bytes, LRU, copy back, no inclusiva 32KB, 8 ways, 64 bytes, read only, 32KB, 8 ways, 64 bytes, write-throught L2 Compartida, 1MB, 16ways, 64bytes, pseudoLRU, copy-back Compartida, 4MB, 16ways, o 6MB 24 ways, 128 bytes, copy-back

DRAM logical organization (4 Mbit) Column Decoder … 1 1 Sense Amps & I/O D Memory Array Q A0…A1 (2,048 x 2,048) Storage W ord Line Cell

DRAM Rendimiento Fast Page mode Synchronous DRAM (SDRAM) Añade señales de timing para permitir repetir los accesos al row buffer sin un nuevo acceso al array de almacenamiento. Este buffer existe en el array de almacenamiento y puede tener un tamaño de 1024 a 2048 bits. Synchronous DRAM (SDRAM) Añade una señal de reloj al interfase de la DRAM, de manera que transferencias sucesivas no necesitan sincronizar con el controlador de la DRAM. Double Data Rate (DDR SDRAM) Transfiere datos en ambos flancos de la señal de reloj de la DRAM  dobla el ancho de banda ( peak data rate) DDR2 reduce consumo, reduciendo el voltaje desde2.5 a 1.8 volts + trabaja a mayor frecuencia hasta 400 MHz DDR3 baja el voltaje a 1.5 volts + mayor frecuencia hasta 800 MHz Mejora en AB, no en latencia

DRAM: el nombre se basa en AB de chip (Peak Chip Transfers / Sec) DIMM: el nombre se basa en AB del DIMM (Peak DIMM MBytes / Sec) Stan-dard Clock Rate (MHz) M transfers / second DRAM Name Mbytes/s/ DIMM DIMM Name DDR 133 266 DDR266 2128 PC2100 150 300 DDR300 2400 PC2400 200 400 DDR400 3200 PC3200 DDR2 533 DDR2-533 4264 PC4300 333 667 DDR2-667 5336 PC5300 800 DDR2-800 6400 PC6400 DDR3 1066 DDR3-1066 8528 PC8500 666 1333 DDR3-1333 10664 PC10700 1600 DDR3-1600 12800 PC12800 x 2 x 8