Sistemas de Memoria Cecilia Hernández
Organización de computadores <ul><li>Sistema de memoria </li></ul><ul><ul><li>Almacenamiento de datos e instrucciones dura...
Desempeño de CPU vs. DRAM Performance ¡Mejorar sólo desempeño de CPU es insuficiente! µProc 60%/yr. (2X/1.5yr) DRAM 9%/año...
Jerarquía de memoria <ul><li>Requerimiento: gran cantidad de memoria, rápido acceso </li></ul><ul><ul><li>Entregar cantida...
Objetivos de jerarquía de memoria <ul><li>Mantener cerca de procesador información que se necesita ahora y en el futuro ce...
Principio de localidad <ul><li>Localidad temporal </li></ul><ul><ul><li>Ejemplo: instrucción en lazo iterativo se lee vari...
Tecnología de memoria Flip-flops Elementos individuales Escritura sincronizada por reloj Banco de registros SRAM (RAM está...
Terminología <ul><li>Hit (acierto):  dato presente en bloque de nivel superior (blk X) </li></ul><ul><ul><li>Hit rate (tas...
Memorias cache <ul><li>Primer nivel en la jerarquía de memoria </li></ul><ul><ul><li>Accesada en ciclo fetch y lectura/esc...
AMD Opteron L1 I-TLB, D-TLB: 32+8 entradas, asociativo L2 I-TLB, D-TLB: 512 entradas, 4-way L1 I-cache, D-cache: 64KB, 2-w...
Pentium 4 L2 IC DC L2 cache unificada: 512K, 8-way L1 I-cache: Trace cache L1 D-cache: 8KB Para más info: www.inf.udec.cl/...
Trace Cache <ul><li>Execution Trace Cache Advanced L1 instruction cache removes decoder pipeline latency, and caches &quot...
Dual Core Processor Para mayor información www.inf.udec.cl/~chernand/ arquitectura/links/ IntelCoreDuo.pdf
Algunas preguntas-Alternativas de diseño <ul><li>Cuándo se trae contenido de memoria a cache? </li></ul><ul><li>Cómo sabem...
Algunas respuestas <ul><li>Cuándo se trae contenido de memoria a cache? </li></ul><ul><ul><li>Por demanda, la primera vez ...
Principio de funcionamiento <ul><li>Secuencia de acceso a memoria </li></ul><ul><ul><li>Procesador genera dirección efecti...
Uso básico de caches <ul><li>Cuando se va a buscar instrucción, primero ver si está en cache </li></ul><ul><ul><li>Si es u...
Acceso a cache para un load o búsqueda (fetch) de una instrucción <ul><li>Cache es mucho más pequeña que memoria principal...
CPU dirección Cache Memoria Principal Como sabemos donde Buscar? Como sabemos si hay Acierto? Memoria principal sólo se ac...
Algunas preguntas-Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloqu...
Organización de cache genérica dirección dirección dirección dirección dirección dirección data data data data data Direcc...
Identificación del bloque <ul><li>La ubicación de memoria puede ser mapeada: </li></ul><ul><ul><li>A una única entrada, or...
Cache con Mapeo Directo data data data data data data tag tag tag tag tag tag Tag  indice  d Si tag (gen por dirección) = ...
Identificación del bloque I <ul><li>Cache de  traducción directa (direct-mapped) </li></ul><ul><li>Para cache de 2 N  byte...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de ...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de ...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 24 bits V Tag Datos Traza de ...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de ...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de ...
Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de ...
Cómo verificar acierto <ul><li>Para caches directamente mapeadas </li></ul><ul><ul><li>Verificar sólo campo tag de la únic...
Ejemplo: cache de acceso directo <ul><li>Para cache tamaño 2 N </li></ul><ul><ul><li>(32-N) bits superiores de dirección s...
Ejemplo: Cache con acceso directo Cache Index 0 1 2 3 : Cache Data Byte 0 0 7 31 : Cache Tag Example: 0x3450 Ex: 0x01 0x34...
Cache completamente asociativo <ul><li>Mapeo más general </li></ul><ul><ul><li>Un bloque de dirección de memoria puede ser...
Identificación del bloque II <ul><li>Cache  completamente asociativo (fully associative) </li></ul><ul><li>Para cache de 2...
Cache asociativo <ul><li>No hay índice </li></ul><ul><ul><li>Cualquier bloque de memoria puede almacenarse en cualquier lí...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones...
Cómo verificar acierto <ul><li>Completamente asociativa </li></ul><ul><ul><li>Verificar todos los tags para ver si hay alg...
Identificación del bloque III <ul><li>Cache  asociativo por conjuntos (set-associative) </li></ul><ul><li>Para cache de 2 ...
Cache asociativo por set (conjunto) <ul><li>Mapeo menos restrictivo </li></ul><ul><ul><li>Bloques en cache son agrupados e...
Cache asociativo por conjuntos <ul><li>Combinación de asociativo y directo </li></ul><ul><li>Asociativo por conjuntos de N...
Cache asociativa por conjuntos Cache Data Cache Block 0 Cache Tag Valid : : : Cache Index Mux 0 1 Sel1 Sel0 Cache Block Co...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos...
Cómo verificar acierto <ul><li>Para caches asociativas por set </li></ul><ul><ul><li>Verificar campo tag del conjunto (set...
Clasificación de fallos <ul><li>Obligatorios ( compulsory ) </li></ul><ul><ul><li>Fallo por primer acceso al bloque </li><...
Algunas preguntas-Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloqu...
Ubicación del bloque I <ul><li>Cache de traducción directa </li></ul><ul><ul><li>Sólo en línea identificada por índice en ...
Ubicación del bloque II <ul><li>Cache completamente asociativo </li></ul><ul><ul><li>En cualquier línea </li></ul></ul>V T...
Ubicación del bloque III <ul><li>Cache asociativo por conjuntos </li></ul><ul><ul><li>Sólo en conjunto indicado por índice...
Comparación <ul><li>Cache asociativo por conjuntos de N vías vs. directo </li></ul><ul><ul><li>N comparadores vs. 1 </li><...
Alternativas de diseño a costo constante Mapeo Directo Asociativo por conjunto De N vias Asociativo completo Fallo obligad...
Desempeño del cache <ul><li>Tiempo promedio de acceso a memoria (average memory access time: AMAT) =  (tasa acierto L1 x t...
Desempeño del cache Ej. 2 Tasa de acierto L2 = 99% Tiempo de acierto L2: 10 ciclos Transferencia bloque DRAM a L2: 250 cic...
Upcoming SlideShare
Loading in...5
×

Memoria I

3,035
-1

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,035
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
130
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memoria I

  1. 1. Sistemas de Memoria Cecilia Hernández
  2. 2. Organización de computadores <ul><li>Sistema de memoria </li></ul><ul><ul><li>Almacenamiento de datos e instrucciones durante ejecución de programas </li></ul></ul><ul><li>Desempeño del sistema de memoria es vital en desempeño del computador como un todo </li></ul><ul><ul><li>Ejecución de cualquier instrucción accesa memoria de instrucciones </li></ul></ul><ul><ul><li>Instrucciones load y store accesan memoria de datos </li></ul></ul>Control Sección Datos Memoria Procesador Entrada Salida
  3. 3. Desempeño de CPU vs. DRAM Performance ¡Mejorar sólo desempeño de CPU es insuficiente! µProc 60%/yr. (2X/1.5yr) DRAM 9%/año. (2X/10 años) 1 10 100 1000 1980 1981 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 DRAM CPU 1982 Procesador-Memoria Gap Desempeño: (crece 50% / año) “ Moore’s Law”
  4. 4. Jerarquía de memoria <ul><li>Requerimiento: gran cantidad de memoria, rápido acceso </li></ul><ul><ul><li>Entregar cantidad de memoria permitida por tecnología más barata </li></ul></ul><ul><ul><li>Proveer velocidad de acceso permitida por tecnología más rápida </li></ul></ul><ul><li>Principio de funcionamiento </li></ul><ul><ul><li>Jerarquía de almacenamiento de creciente tamaño y tiempo de acceso </li></ul></ul><ul><ul><li>Niveles más rápido de la jerarquía contienen copia del subconjunto de datos más utilizados de los niveles de mayor tamaño </li></ul></ul>Control Datapath Memoria Secundaria (Disco) Procesador Registros Memoria Principal (DRAM) Cache L2 Datos, Inst. ~1 ~10,000,000 Velocidad (ciclos): ~1-5 ~100 ~100- 1000 40-400G Tamaño (bytes): ~32K ~512M-4G Cache L1 Inst Cache L1 Datos ~5-12 ~32K
  5. 5. Objetivos de jerarquía de memoria <ul><li>Mantener cerca de procesador información que se necesita ahora y en el futuro cercano </li></ul><ul><ul><li>Memoria más cerca del procesador es más rápida y cara </li></ul></ul><ul><ul><li>Consecuencia, ser selectivo en tal información </li></ul></ul><ul><li>Tecnologías en jerarquía de memoria </li></ul><ul><ul><li>Más cerca de procesador, memorias cache SRAM </li></ul></ul><ul><ul><li>Más lejos, memoria principal DRAM </li></ul></ul><ul><ul><li>Discos magnéticos: almacenamiento de archivos </li></ul></ul>
  6. 6. Principio de localidad <ul><li>Localidad temporal </li></ul><ul><ul><li>Ejemplo: instrucción en lazo iterativo se lee varias veces, variables se reutilizan </li></ul></ul><ul><ul><li>Mantener los datos referenciados más recientemente cerca del procesador </li></ul></ul><ul><li>Localidad espacial </li></ul><ul><ul><li>Ejemplo: Leer instrucción N, luego N+1, luego N+2, etc., elementos de un vector. Programa en general secuencial </li></ul></ul><ul><ul><li>Mover bloques de datos contiguos a los niveles superiores de la jerarquía de memoria. Arreglos </li></ul></ul>Address Space 0 2^n - 1 Probability of reference
  7. 7. Tecnología de memoria Flip-flops Elementos individuales Escritura sincronizada por reloj Banco de registros SRAM (RAM estática) Organizada como arreglo unidimensional Rápido acceso, costosa: 6 transistores/bit Memorias cache DRAM (RAM dinámica) Dinámica: necesita ser refrescada periódicamente (8 ms) Organizada como arreglo bidimensional: filas ycolumnas Acceso lento, densa: 1 transistor/bit Memoria principal Costo/velocidad: SRAM/DRAM ~ 8-16 RAM: Random Access Memory (memoria de acceso aleatorio) velocidad costo y densidad
  8. 8. Terminología <ul><li>Hit (acierto): dato presente en bloque de nivel superior (blk X) </li></ul><ul><ul><li>Hit rate (tasa de acierto): fracción de accesos a memoria encontrados en nivel superior </li></ul></ul><ul><ul><li>Hit time (tiempo de acierto): tiempo de acceso al nivel superior  tiempo de acceso memoria + tiempo determinación de acierto </li></ul></ul><ul><li>Miss (fallo): data debe traerse de un bloque de nivel inferior (blk Y) </li></ul><ul><ul><li>Miss rate (tasa de fallo): 1 – (Hit rate) </li></ul></ul><ul><ul><li>Miss penalty (penalidad de fallo): tiempo para reemplazar el bloque en nivel superior + tiempo para entregar dato al procesador </li></ul></ul><ul><li>Tiempo de acierto << penalidad de fallo </li></ul>
  9. 9. Memorias cache <ul><li>Primer nivel en la jerarquía de memoria </li></ul><ul><ul><li>Accesada en ciclo fetch y lectura/escritura de datos </li></ul></ul><ul><ul><li>Nivel 1 (L1) en mismo chip del procesador </li></ul></ul><ul><ul><li>Máquinas contemporáneas: L2 (on-chip) y L3 (off-chip) </li></ul></ul><ul><li>Tiempo de acceso compatible con velocidad del procesador </li></ul><ul><ul><li>1-2 ciclos </li></ul></ul><ul><ul><li>Pequeña y rápida </li></ul></ul><ul><ul><li>SRAM </li></ul></ul><ul><li>Objetivo </li></ul><ul><ul><li>Mantener el conjunto de datos e instrucciones más utilizado por el programa en el cache </li></ul></ul>
  10. 10. AMD Opteron L1 I-TLB, D-TLB: 32+8 entradas, asociativo L2 I-TLB, D-TLB: 512 entradas, 4-way L1 I-cache, D-cache: 64KB, 2-way L2 cache unificada: 1MB, 16-way
  11. 11. Pentium 4 L2 IC DC L2 cache unificada: 512K, 8-way L1 I-cache: Trace cache L1 D-cache: 8KB Para más info: www.inf.udec.cl/~chernand/arquitectura/links/Pentium4.pdf
  12. 12. Trace Cache <ul><li>Execution Trace Cache Advanced L1 instruction cache removes decoder pipeline latency, and caches &quot;decoded&quot; instructions, thus improving efficiency and hit rate to cached instructions. L1 cache supplies up to 12K decoded instructions into the processor pipeline. </li></ul>
  13. 13. Dual Core Processor Para mayor información www.inf.udec.cl/~chernand/ arquitectura/links/ IntelCoreDuo.pdf
  14. 14. Algunas preguntas-Alternativas de diseño <ul><li>Cuándo se trae contenido de memoria a cache? </li></ul><ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloque </li></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><li>U bicación del bloque </li></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><li>Reemplazo del bloque </li></ul><ul><ul><li>O qué ocurre si queremos traer algo nuevo y el lugar donde queremos ponerlo ya está ocupado? estrategia de escritura </li></ul></ul>
  15. 15. Algunas respuestas <ul><li>Cuándo se trae contenido de memoria a cache? </li></ul><ul><ul><li>Por demanda, la primera vez que tenemos un fallo por dirección. </li></ul></ul><ul><ul><li>Prefetch. Por adelantado antes que sea usado pero con alta probabilidad que se use en el futuro próximo </li></ul></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><ul><li>Depende de la organización del cache </li></ul></ul><ul><li>Cómo sabemos está en cache? </li></ul><ul><ul><li>Cada entrada en cache contiene su nombre o tag </li></ul></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><ul><li>Entrada actual en cache se reemplaza por nueva de acuerdo a algún criterio </li></ul></ul>
  16. 16. Principio de funcionamiento <ul><li>Secuencia de acceso a memoria </li></ul><ul><ul><li>Procesador genera dirección efectiva del dato </li></ul></ul><ul><ul><li>Dato se busca primero en memoria cache </li></ul></ul><ul><ul><li>Si dato se encuentra en el cache (acierto), se entrega al procesador </li></ul></ul><ul><ul><li>Si dato no se encuentra en el cache (fallo), se busca en el siguiente nivel de la jerarquía de memoria (ej. DRAM) </li></ul></ul><ul><li>Aprovechar localidad temporal </li></ul><ul><ul><li>Si dato no se encuentra en el cache, traerlo al cache desde DRAM </li></ul></ul><ul><ul><li>Porque es probable que se vuelva a direccionar pronto </li></ul></ul><ul><li>Aprovechar localidad espacial </li></ul><ul><ul><li>En vez de traer palabra referenciada, traer un bloque de varias palabras </li></ul></ul><ul><ul><li>Porque es probable que se direccione pronto palabra cercana </li></ul></ul><ul><ul><li>Accesos aleatorios a DRAM son lentos, pero acceso a direcciones consecutivas es más rápido </li></ul></ul><ul><ul><li>Ej. Bloques de 64 bytes: referencia palabra en dirección 24, traer datos en direcciones 0-63. Referencia a palabra en dirección 96, traer datos en direcciones 64-127 </li></ul></ul>
  17. 17. Uso básico de caches <ul><li>Cuando se va a buscar instrucción, primero ver si está en cache </li></ul><ul><ul><li>Si es un acierto, traer instrucción de cache a IR </li></ul></ul><ul><ul><li>Si no está (fallo), ir al próximo nivel en la jerarquía de memoria, hasta encontrarlo </li></ul></ul><ul><li>Cuando se ejecuta un load, primero ver si dato está en cache </li></ul><ul><ul><li>Si es un acierto, leer dato de cache a registro destino </li></ul></ul><ul><ul><li>Si es un fallo, ir al próximo nivel en jerarquía de memoria hasta encontrarlo </li></ul></ul><ul><li>Cuando se ejecuta store, hay varias posibilidades </li></ul><ul><ul><li>Al final se escribe en memoria en jerarquía de memoria </li></ul></ul><ul><ul><li>Diferentes estrategias (Write through y Write back) </li></ul></ul>
  18. 18. Acceso a cache para un load o búsqueda (fetch) de una instrucción <ul><li>Cache es mucho más pequeña que memoria principal </li></ul><ul><ul><li>No todas las direcciones de memoria principal tiene una correspondiente en cache </li></ul></ul><ul><li>Cuando una referencia a memoria es generada? </li></ul><ul><ul><li>cuando CPU genera una dirección </li></ul></ul><ul><ul><li>Se busca en cache, si ubicación de memoria está mapeada en cache, tenemos un acierto. Contenido de ubicación en cache es retornado a CPU </li></ul></ul><ul><ul><li>Si no está en cache, tenemos un fallo y se busca en siguiente nivel de jerarquía de memoria </li></ul></ul>
  19. 19. CPU dirección Cache Memoria Principal Como sabemos donde Buscar? Como sabemos si hay Acierto? Memoria principal sólo se accesa si hay fallo acierto fallo Acceso a cache
  20. 20. Algunas preguntas-Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloque </li></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><li>U bicación del bloque </li></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><li>Reemplazo del bloque </li></ul><ul><ul><li>O qué ocurre si queremos traer algo nuevo y el lugar donde queremos ponerlo ya está ocupado? estrategia de escritura </li></ul></ul>
  21. 21. Organización de cache genérica dirección dirección dirección dirección dirección dirección data data data data data Dirección o tag Generada por CPU Si dirección (tag) generada por CPU = dirección (tag) de una entrada cache, tenemos un acierto en cache; el data en entrada cache es buena Entrada en cache o bloque cache o linea cache
  22. 22. Identificación del bloque <ul><li>La ubicación de memoria puede ser mapeada: </li></ul><ul><ul><li>A una única entrada, organización cache es mapeada directa ( direct mapped ) </li></ul></ul><ul><ul><li>en cualquier lugar del cache, organización cache es completamente asociativa ( full associative ) </li></ul></ul><ul><ul><li>A una de varias entradas en cache, organización es asociativa por conjunto ( set-associative ) </li></ul></ul>
  23. 23. Cache con Mapeo Directo data data data data data data tag tag tag tag tag tag Tag indice d Si tag (gen por dirección) = tag(entrada apuntada por índice en cache) y bit válido es on, tenemos acierto d corresponde a número de bytes en el bloque indice corresponde a número de bloques en cache tag es lo que resta de direción Estos campos tienen el mismo tamaño Validez?
  24. 24. Identificación del bloque I <ul><li>Cache de traducción directa (direct-mapped) </li></ul><ul><li>Para cache de 2 N bytes, bloques de 2 M bytes  2 (N-M) bloques (líneas) </li></ul><ul><ul><li>M bits inferiores son desplazamiento en el bloque </li></ul></ul><ul><ul><li>(N-M) bits siguientes son índice en el cache </li></ul></ul><ul><ul><li>(32-N) bits superiores de dirección son el “ tag ”, </li></ul></ul><ul><li>Bloque se busca en la línea indicada por el índice </li></ul><ul><li>Simple y rápida, pero tasa de fallos alta por conflictos </li></ul>Ej. dirección: 0x34500010 N = 8 M = 4 Tag: 24 bits Índice: 4 bits Ej: 0x1 Ej: 0x0 0 1 2 3 : Datos Byte 0 : Ej: 0x345000 0x34500 Bit Validez : 15 Byte 1 Byte 15 : Byte 16 Byte 17 Byte 31 : Byte 240 Byte 255 : Tag Índice 0 3 31 Tag Desplazamiento 7 Dirección de bloque 4 8
  25. 25. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  26. 26. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A54 0 0 ¡Acierto! 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  27. 27. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 24 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A54 0 1 ¡Acierto! 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  28. 28. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A54 1 0 ¡Acierto! 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  29. 29. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x000012 5 6 ¡Acierto! 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  30. 30. Ejemplo: Cache de traducción directa Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x000011 1 2 ¡Fallo! 0x000012 1 0x003A54 1 0x003A54 1 Despl. Índice Tag 4 4 24
  31. 31. Cómo verificar acierto <ul><li>Para caches directamente mapeadas </li></ul><ul><ul><li>Verificar sólo campo tag de la única posible entrada </li></ul></ul><ul><li>Mapeo más restrictivo </li></ul><ul><ul><li>Una ubicación de bloque de memoria sólo puede ser mapeado en un único lugar en el cache </li></ul></ul>
  32. 32. Ejemplo: cache de acceso directo <ul><li>Para cache tamaño 2 N </li></ul><ul><ul><li>(32-N) bits superiores de dirección son el “cache tag”, (N-M) bits siguientes son índice en el cache </li></ul></ul><ul><ul><li>M bits inferiores con desplazamiento en el bloque (tamaño 2 M ) </li></ul></ul><ul><ul><li>Bloque también llamado “línea” </li></ul></ul><ul><ul><li>Ante un fallo, traer la línea completa del siguiente nivel de memoria </li></ul></ul>
  33. 33. Ejemplo: Cache con acceso directo Cache Index 0 1 2 3 : Cache Data Byte 0 0 7 31 : Cache Tag Example: 0x3450 Ex: 0x01 0x3450 Stored as part of the cache “state” Valid Bit : 255 Byte 1 Byte 255 : Byte 256 Byte 257 Byte 511 : Byte 65026 Byte 65535 : Cache Tag Byte Select Ex: 0x00 15 Block address Dirección: 0x34500100 N = 16=> 64K M = 8 =>256B Tag: 16 bits Índice: 8 bits
  34. 34. Cache completamente asociativo <ul><li>Mapeo más general </li></ul><ul><ul><li>Un bloque de dirección de memoria puede ser mapeado en cualquier parte del cache </li></ul></ul><ul><ul><li>Ningún cache de tamaño considerable es implementado de esta manera, pero es el comúnmente usado para el mapeo de páginas virtuales a físicas (disco, memoria principal) en pequeñas TLBs (ver más adelante) </li></ul></ul>
  35. 35. Identificación del bloque II <ul><li>Cache completamente asociativo (fully associative) </li></ul><ul><li>Para cache de 2 N bytes, bloques de 2 M bytes  2 (N-M) bloques (líneas) </li></ul><ul><ul><li>M bits inferiores son desplazamiento en el bloque </li></ul></ul><ul><ul><li>(32-M) bits superiores de dirección son el “ tag ”, </li></ul></ul><ul><li>Bloque se busca en todas las líneas simultáneamente </li></ul><ul><li>Menor tasa de fallos por conflictos, pero más compleja y lenta </li></ul>Ej. dirección: 0x34500100 N = 8 M = 4 Tag: 28 bits : Datos Byte 0 0 3 31 : Tag V : Byte 1 Byte 15 : Byte 16 Byte 17 Byte 31 : Tag Desplazamiento Ej: 0x0 = = = = = Ej: 0x345001 4 0 1 15
  36. 36. Cache asociativo <ul><li>No hay índice </li></ul><ul><ul><li>Cualquier bloque de memoria puede almacenarse en cualquier línea del cache </li></ul></ul><ul><ul><li>Tag se compara con todas las líneas del cache en paralelo </li></ul></ul><ul><ul><li>N líneas  N comparadores (alto costo) </li></ul></ul><ul><ul><li>Por definición fallos de conflicto = 0 </li></ul></ul>
  37. 37. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  38. 38. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A540 0 ¡Acierto! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  39. 39. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A540 1 ¡Acierto! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  40. 40. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x003A541 0 ¡Acierto! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  41. 41. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x0000125 6 ¡Acierto! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  42. 42. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x0000111 2 ¡Acierto! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  43. 43. Ejemplo: Cache asociativo Cache de 16 bloques, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A540 0 0x003A540 1 0x003A541 0 0x0000125 6 0x0000111 2 0x002C051 0 1 bit 28 bits Despl. Tag 4 28 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x002C051 0 ¡Fallo! 0x0000111 1 0x0000125 1 0x003A541 1 0x003A540 1
  44. 44. Cómo verificar acierto <ul><li>Completamente asociativa </li></ul><ul><ul><li>Verificar todos los tags para ver si hay alguno con la dirección generada por ALU </li></ul></ul><ul><ul><li>Muy cara, se tiene que realizar todas las comparaciones en paralelo </li></ul></ul><ul><ul><li>Normalmente no existen para caches de propósito general </li></ul></ul>
  45. 45. Identificación del bloque III <ul><li>Cache asociativo por conjuntos (set-associative) </li></ul><ul><li>Para cache de 2 N bytes, bloques de 2 M bytes  2 (N-M) bloques (líneas) </li></ul><ul><ul><li>Asociatividad 2 K -way  conjuntos de 2 K líneas, 2 (N-M-K) conjuntos </li></ul></ul><ul><ul><li>M bits inferiores son desplazamiento en el bloque </li></ul></ul><ul><ul><li>(N-M-K) bits siguientes son índice del conjunto </li></ul></ul><ul><ul><li>(32-N+K) bits superiores de dirección son el “ tag ”, </li></ul></ul><ul><li>Bloque se busca en todos las líneas del conjunto indicado por el índice </li></ul><ul><li>Baja tasa de fallos por conflicto, más sencillo que cache asociativo </li></ul>Ej. dirección: 0x34500100 N = 8 M = 4 K = 1 (2-way) Tag: 25 bits Datos Tag V : : : Cache Data Tag V : : : Mux 0 1 Sel1 Sel0 Dato Tag Dir = OR Hit Ej: 0x1 Ej: 0x0 Ej: 0x345000 | 0b Índice 0 3 31 Tag Desplazamiento 6 4 7 Tag Dir =
  46. 46. Cache asociativo por set (conjunto) <ul><li>Mapeo menos restrictivo </li></ul><ul><ul><li>Bloques en cache son agrupados en conjuntos y una ubicación de bloque de memoria se mapea en conjunto. Dentro del conjunto, el bloque de memoria puede ser puesto en cualquier parte. Asociativos de 2 (2-way set-associative), 4 , 8 y 16 se han implementado </li></ul></ul><ul><li>Mapeo directo = 1-way set-associative </li></ul><ul><li>Completamente asociativo con m entradas es un m-way set-associative </li></ul>
  47. 47. Cache asociativo por conjuntos <ul><li>Combinación de asociativo y directo </li></ul><ul><li>Asociativo por conjuntos de N vías: N líneas por índice en el cache </li></ul><ul><ul><li>Equivalente a N caches directos en paralelo </li></ul></ul><ul><li>Ejemplo: cache asociativo por conjuntos de dos vías </li></ul><ul><ul><li>Índice selecciona un conjunto (set) </li></ul></ul><ul><ul><li>Los dos tags se comparan en paralelo </li></ul></ul><ul><ul><li>Si hay un acierto, seleccionar dato dentro del conjunto </li></ul></ul>
  48. 48. Cache asociativa por conjuntos Cache Data Cache Block 0 Cache Tag Valid : : : Cache Index Mux 0 1 Sel1 Sel0 Cache Block Compare Adr Tag OR Hit Cache Data Cache Block 0 Cache Tag Valid : : : Compare
  49. 49. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  50. 50. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x003A54|0b 0 0 ¡Acierto! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  51. 51. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x003A54|0b 0 1 ¡Acierto! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  52. 52. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x003A54|0b 1 1 ¡Acierto! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  53. 53. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x000012|0b 5 6 ¡Acierto! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  54. 54. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x000011|0b 1 2 ¡Acierto! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  55. 55. Ejemplo: Cache asociativo por conjuntos Cache de 16 bloques, 2-way, líneas de 16 bytes, direcciones de 32 bits V Tag Datos Traza de direcciones 0x003A54 0 0 0x003A54 0 1 0x003A54 1 0 0x000012 5 6 0x000011 1 2 0x002C05 1 0 1 bit 25 bits Despl. Tag 4 25 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 Ind. 3 V Tag Datos 1 bit 25 bits 16 bytes 0x002C05|0b 1 0 ¡Fallo! Línea 0 Línea 1 0x000012 | 0b 1 0x003A54 | 0b 1 0x003A54 | 0b 1 0x000011 | 0b 1
  56. 56. Cómo verificar acierto <ul><li>Para caches asociativas por set </li></ul><ul><ul><li>Verificar campo tag del conjunto (set) de posibles entradas </li></ul></ul>
  57. 57. Clasificación de fallos <ul><li>Obligatorios ( compulsory ) </li></ul><ul><ul><li>Fallo por primer acceso al bloque </li></ul></ul><ul><ul><li>Insignificantes en programas grandes con buena localidad </li></ul></ul><ul><li>Capacidad ( capacity ) </li></ul><ul><ul><li>Tamaño del cache insuficiente para datos utilizados por programa </li></ul></ul><ul><li>Conflicto ( conflict ) </li></ul><ul><ul><li>Dos bloques compiten por el mismo lugar en el cache (mismo índice) </li></ul></ul><ul><ul><li>Cero para cache completamente asociativo, máximo para cache directo </li></ul></ul><ul><li>Coherencia (coherence) </li></ul><ul><ul><li>Elemento externo modifica memoria principal </li></ul></ul><ul><ul><li>Necesario invalidar copia almacenada en el cache </li></ul></ul>
  58. 58. Algunas preguntas-Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloque </li></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><li>U bicación del bloque </li></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><li>Reemplazo del bloque </li></ul><ul><ul><li>Qué ocurre si queremos traer algo nuevo y el lugar donde queremos ponerlo ya está ocupado? estrategia de escritura </li></ul></ul>
  59. 59. Ubicación del bloque I <ul><li>Cache de traducción directa </li></ul><ul><ul><li>Sólo en línea identificada por índice en dirección </li></ul></ul>V Tag Datos Dirección 0x000012 5 6 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF Despl. Índice Tag 4 4 24
  60. 60. Ubicación del bloque II <ul><li>Cache completamente asociativo </li></ul><ul><ul><li>En cualquier línea </li></ul></ul>V Tag Datos Dirección 0x0000125 6 1 bit 24 bits 16 bytes 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF Despl. Tag 4 28
  61. 61. Ubicación del bloque III <ul><li>Cache asociativo por conjuntos </li></ul><ul><ul><li>Sólo en conjunto indicado por índice </li></ul></ul><ul><ul><li>En cualquier línea dentro del conjunto </li></ul></ul>Despl. Tag 4 27 Ind. 3 Dirección 0x000012 5 6 0x000012|0b 5 6 0x0 V Tag Datos 1 bit 27 bits 16 bytes Conjunto 0 Conjunto 1 0x1 0x2 0x3 0x4 0x5 0x6 0x7 V Tag Datos 1 bit 27 bits 16 bytes
  62. 62. Comparación <ul><li>Cache asociativo por conjuntos de N vías vs. directo </li></ul><ul><ul><li>N comparadores vs. 1 </li></ul></ul><ul><ul><li>Retardo de MUX adicional </li></ul></ul><ul><ul><li>Obtiene dato después de determinar acierto/fallo </li></ul></ul><ul><ul><li>En cache directo, datos disponibles antes de determinar acierto/fallo </li></ul></ul><ul><ul><ul><li>Posible asumir acierto y corregir en caso de fallo </li></ul></ul></ul><ul><li>Cache asociativo por conjuntos de N vías vs. Asociativo </li></ul><ul><ul><li>N comparadores vs. M (M = #líneas/N; M >> N) </li></ul></ul>
  63. 63. Alternativas de diseño a costo constante Mapeo Directo Asociativo por conjunto De N vias Asociativo completo Fallo obligado Tamaño Cache Fallo por capacidad Fallo por coherencia Grande Mediano Pequeño Mismo Mismo Mismo Fallo por conflicto Alto Mediano Cero Bajo Mediano Alto Mismo Mismo Mismo Tiempo de acierto aumenta con tamaño y asociatividad
  64. 64. Desempeño del cache <ul><li>Tiempo promedio de acceso a memoria (average memory access time: AMAT) = (tasa acierto L1 x tiempo de acierto L1)+ (tasa fallo L1 x penalidad fallo L1) </li></ul><ul><li>Ej. L1 directo </li></ul><ul><li>Tasa de acierto L1 = 90% </li></ul><ul><li>Tiempo de acierto L1 = 1 ciclo </li></ul><ul><li>Transferencia bloque DRAM a L1: 250 ciclos </li></ul><ul><li>AMAT = 0.90*1 + 0.10*250 = 25.9 ciclos </li></ul>
  65. 65. Desempeño del cache Ej. 2 Tasa de acierto L2 = 99% Tiempo de acierto L2: 10 ciclos Transferencia bloque DRAM a L2: 250 ciclos Tiempo fallo(L1) = AMAT(L2) = 0.99 * 10 + 0.01 * 250 = 12.4 ciclos AMAT = 0.90 * 1 + 0.10 * 12.4 = 2.14 ciclos Ej. 3 Repetir para L1 asociativo por conjuntos (Tasa acierto = 97%, tiempo acierto = 2 ciclos) Sin L2: AMAT = 0.97*2 + 0.03*250 = 9.44 ciclos Con L2: AMAT = 0.97*2 + 0.03*12.4 = 2.312 ciclos
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×