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.
5.
6.
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
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.
13. Dual Core Processor Para mayor información www.inf.udec.cl/~chernand/ arquitectura/links/ IntelCoreDuo.pdf
14.
15.
16.
17.
18.
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.
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.
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.
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. 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. 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. 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. 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. 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.
32.
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.
35.
36.
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. 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. 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. 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. 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. 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. 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.
45.
46.
47.
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. 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. 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. 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. 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. 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. 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. 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.
57.
58.
59.
60.
61.
62.
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.
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