Clase Práctica - caché Organización del Computador 1 Mariano Moscato - Verano 2010 Ejercicio 1 1 Una computadora utiliza una caché de correspondencia directa de 32 lı́neas de 16 palabras cada una. La memoria principal mide 220 palabras y es direccionable a palabra. a) ¿cuántas lı́neas posee la memoria principal? ¿a cuántos bloques corresponde? Solución de Mariano M. Moscato. (10 de noviembre de 2011) La memoria posee 220 palabras. Cada lı́nea de caché es de 16 (24 ) palabras, entonces la 20 memoria tiene 224 = 216 lı́neas. Por otro lado, la caché tiene 32 lı́neas por lo que la memoria estará “dividida” en bloques de 16 32 lı́neas. Si tenemos 216 lı́neas de memoria y bloques de 32 (25 ) lı́neas, tendremos 225 = 211 bloques de memoria. b) Mostrar el formato de una dirección de memoria vista desde la caché (tag, line, index ). ¿Cuáles de estos campos deben guardarse en la caché? Solución de Mariano M. Moscato. (10 de noviembre de 2011) Como la lı́nea es de 16 palabras y se utiliza direccionamiento a palabra, el campo index tendrá 4 bits. Teniendo en cuenta que la caché tiene 32 lı́neas, el campo line tendrá 5 bits. Además sabemos que la memoria está dividida en 211 bloques, por lo que el campo tag tendrá 11 bits. tag 11 bits line 5 bits index 4 bits Sólo debemos guardar el tag. A modo de verificación notemos que la suma de los tamaños de los tres campos da veinte, que es justamente la cantidad de bits necesaria para asignar direcciones a este tipo de memoria (de 220 palabras con direccionamiento a palabra). c) ¿En qué lugar de la caché se guarda la palabra que se encuentra en la dirección de memoria 0x0DB63? Mostrar cómo queda la caché al leer dicha dirección. Solución de Mariano M. Moscato. (10 de noviembre de 2011) Primero, analicemos la dirección 0x0DB63; que en binario serı́a 0000 1101 1011 0110 0011. Escribamos cómo ve esta dirección la caché: 1 Ejercicio 1 del capı́tulo 6, L. Null & J. Lobur, Essentials of Computer Organization and Architecture 1 tag 0000 1101 101 0x6D line 1 0110 0x16 index 0011 0x3 Entonces, luego del pedido, la lı́nea 0x16 de la caché corresponderá al bloque 0x6D. En el ı́ndice 3 de esa lı́nea estará la palabra cuya dirección en memoria principal es 0x0DB63. Ejercicio 2 2 Una computadora utiliza una caché asociativa de 64 lı́neas de 32 palabras. La memoria principal cuenta con 216 palabras y es direccionable “a palabra”. a) ¿cuántas lı́neas posee la memoria principal? Solución de Mariano M. Moscato. (10 de noviembre de 2011) Cada lı́nea tiene 32 palabras de largo. Entonces la cantidad de lı́neas de la memoria será 216 = 211 25 b) Mostrar el formato de una dirección de memoria vista desde la caché (tag, index ). ¿Cuáles de estos campos deben guardarse en la caché? Solución de Mariano M. Moscato. (10 de noviembre de 2011) La lı́nea tiene 32 palabras; luego, alcanzan con cinco bits para el ı́ndice. En el punto anterior vimos que hay 211 lı́neas en memoria principal; entonces, bastan con once bits para el tag. tag 11 bits 2 Ejercicio index 5 bits 3 del capı́tulo 6, L. Null & J. Lobur, Essentials of Computer Organization and Architecture 2 c) ¿En qué lugar de la caché se guarda la palabra que se encuentra en la dirección de memoria 0xF8C9? Mostrar cómo queda la caché al leer dicha dirección. Solución de Mariano M. Moscato. (10 de noviembre de 2011) Como antes, comencemos por analizar la dirección 0xF8C9; en binario se escribe como 1111 1000 1100 1001. Utilizando el punto anterior sabemos que para esta dirección el tag es 0x7C6 y que el index es 9. Entonces, luego de procesar el pedido de la palabra cuya dirección es 0xF8C9, la primer lı́nea libre (o marcada como no válida) de la caché corresponderı́a a la lı́nea de memoria principal 0x7C6; donde la palabra pedida ocupa el lugar indicado por el ı́ndice 9. La siguiente figura muestra un ejemplo en el cual se asume que la caché estaba vacı́a antes de procesar el pedido. Ejercicio 3 3 Se tiene una computadora con 227 palabras de memoria principal. La caché tiene una capacidad total de 215 lı́neas de 64 palabras cada una. a) Mostrar el formato de una dirección de memoria para una caché asociativa por conjuntos de 2 vias. Solución de Mariano M. Moscato. (10 de noviembre de 2011) La memoria tiene 227 27 palabras. Como cada lı́nea tiene 64 palabras, la memoria tiene 226 = 221 lı́neas. La caché tiene 21 2 vias de 214 lı́neas cada una, entonces la memoria principal se encuentra dividida en 2214 = 27 bloques. tag 7 bits line 14 bits index 6 bits b) ¿Cómo queda cargada la caché al leer primero la posición de memoria 0x01178FC y luego 0x03178FC? 3 Ejercicio 5 del capı́tulo 6, L. Null & J. Lobur, Essentials of Computer Organization and Architecture 3 Solución de Mariano M. Moscato. (10 de noviembre de 2011) La primer dirección de memoria (000 0001 0001 0111 1000 1111 1100 en binario) será interpretada por la caché como 0x01 (tag), 0x05E3 (conjunto), 0x3C (ı́ndice). Si en ese conjunto las dos vı́as estuvieran libres, la memoria caché podrı́a quedar como se muestra en la siguiente figura. (Recordar que se carga toda la lı́nea.) La segunda dirección de memoria (000 0011 0001 0111 1000 1111 1100 en binario) será interpretada por la caché como 0x03 (tag), 0x05E3 (conjunto), 0x3C (ı́ndice). Siguendo con el ejemplo de la figura anterior, la caché cambiarı́a como se muestra a continuación. (Recordar que se carga toda la lı́nea.) 4 Ejercicio 4 Una computadora trabaja con palabras e instrucciones (de tamaño fijo) de 64 bits, direcciones y registros de 32 bits y direccionamiento a palabra. Sea el programa mostrado a la derecha, que calcula el producto escalar de dos vectores (el tamaño de los vectores se indica en R4). ciclo: Sabiendo que la etiqueta ciclo se encuentra cargada en la posición de memoria 0x0000 00F0, que las etiquetas de los vectores (v1 y v2) se encuentran en la posición 0xF000 00F0 y 0xFFFF 00F0, y suponiendo que dicha computadora cuenta con una memoria caché de 16 KB para almacenar datos, analizar la tasa de aciertos para una caché de correspondencia directa con lı́neas de 8 palabras. MOV R0,0 MOV R1,v1 MOV R2,v2 MOV R3,0 ADD R3,[R1] MUL R3,[R2] ADD R0,R3 MOV R3,0 INC R1 INC R2 DEC R4 JNZ ciclo Solución de Mariano M. Moscato. (10 de noviembre de 2011) Primero veamos cómo son los campos de acuerdo al tipo de caché con el que estamos trabajando. Como es una caché de correspondencia directa, cada dirección de memoria será interpretada utilizando los campos: tag, lı́nea e ı́ndice. Como hay 23 palabras en cada lı́nea y el procesador usa una dirección por palabra, alcanzarán 3 bits para el ı́ndice. Dado que la caché mide 16 KB, y cada palabra 8 bytes (64 bits), caben en ella 211 palabras. Como cada lı́nea agrupa 23 palabras, en la caché caben 28 lı́neas. Luego, alcanzan con 8 bits para el campo lı́nea. Entonces, como sabemos que las direcciones miden 32 bits, el campo tag deberá medir 32 − 8 − 3 = 21 bits. Veamos ahora los pedidos a memoria que vamos a tener a medida que ejecutemos el programa. Comencemos por las instrucciones anteriores al ciclo. pedido 1 2 3 4 0000 00EC 0000 00ED 0000 00EE 0000 00EF instrucción instrucción instrucción instrucción MOV MOV MOV MOV R0,0 R1,v1 R2,v2 R3,0 vista caché 000000 1D 4 000000 1D 5 000000 1D 6 000000 1D 7 resultado M H H H Hasta aquı́ tenemos cuatro pedidos, de los cuales el primero es un miss, pero provoca que se cargue la lı́nea correspondiente a los siguientes tres, que resultarán en sendos hits. La primera iteración del ciclo provoca los siguientes pedidos. pedido 5 6 7 8 9 10 11 12 13 14 0000 00F0 F000 00F0 0000 00F1 FFFF 00F0 0000 00F2 0000 00F3 0000 00F4 0000 00F5 0000 00F6 0000 00F7 instrucción dato instrucción dato instrucción instrucción instrucción instrucción instrucción instrucción ADD R3,[R1] MUL R3,[R2] ADD R0,R3 MOV R3,0 INC R1 INC R2 DEC R4 JNZ ciclo vista caché 000000 1E 0 1E0000 1E 0 000000 1E 1 1FFFE0 1E 0 000000 1E 2 000000 1E 3 000000 1E 4 000000 1E 5 000000 1E 6 000000 1E 7 resultado M M M M M H H H H H Si bien las ocho instrucciones del ciclo ocupan exactamente la lı́nea de tag cero y número de lı́nea 1E, el pedido de datos de las dos primeras instrucciones provocan que se desaloje (y se vuelva a alojar) dicha lı́nea en dos oportunidades sucesivas. Por lo tanto, tenemos diez pedidos más, los que se reparten equitativamente entre hits y misses. La segunda iteración provocará estos pedidos: 5 pedido 15 16 17 18 19 20 21 22 23 24 0000 00F0 F000 00F1 0000 00F1 FFFF 00F1 0000 00F2 0000 00F3 0000 00F4 0000 00F5 0000 00F6 0000 00F7 instrucción dato instrucción dato instrucción instrucción instrucción instrucción instrucción instrucción ADD R3,[R1] MUL R3,[R2] ADD R0,R3 MOV R3,0 INC R1 INC R2 DEC R4 JNZ ciclo vista caché 000000 1E 0 1E0000 1E 1 000000 1E 1 1FFFE0 1E 1 000000 1E 2 000000 1E 3 000000 1E 4 000000 1E 5 000000 1E 6 000000 1E 7 resultado H M M M M H H H H H Esta configuración es casi idéntica a la anterior, la única diferencia es que el primer pedido no provoca un miss como antes debido a que la lı́nea ya se encontraba en la caché (por el último pedido de la iteración anterior). Sin embargo, vuelve a repetirse el desalojo sucesivo de la lı́nea 1E. Es fácil ver que esto ocurre porque los pedidos de datos corresponden a lı́neas con el mismo número de lı́nea (1E) que las direcciones de las instrucciones. Dado que los datos pedidos se ubican en el primer ı́ndice de la lı́nea y se van pidiendo secuencialmente, esta misma configuración se repetirá en las siguientes seis iteraciones del ciclo. La novena iteración provocará los siguientes pedidos. pedido 95 96 97 98 99 100 101 102 103 104 0000 00F0 F000 00F8 0000 00F1 FFFF 00F8 0000 00F2 0000 00F3 0000 00F4 0000 00F5 0000 00F6 0000 00F7 instrucción dato instrucción dato instrucción instrucción instrucción instrucción instrucción instrucción ADD R3,[R1] MUL R3,[R2] ADD R0,R3 MOV R3,0 INC R1 INC R2 DEC R4 JNZ ciclo vista caché 000000 1E 0 1E0000 1F 0 000000 1E 1 1FFFE0 1F 0 000000 1E 2 000000 1E 3 000000 1E 4 000000 1E 5 000000 1E 6 000000 1E 7 resultado H M H M H H H H H H A partir de esta iteración ya no tenemos el desalojo de la lı́nea 1E, mencionado más arriba, y logramos aumentar la cantidad de hits a ocho de los diez pedidos que el ciclo realiza. Entonces: Si R4 = 1, la tasa de aciertos es de 8 14 ; Si 1 < R4 ≤ 8, la tasa de aciertos es de 3+5+6(R4−1) 4+10(R4) ; Si 8 < R4 ≤ 2032, la tasa de aciertos es de 3+5+6·7+8(R4−8) ; 4+10(R4) Preguntas finales: a) ¿Qué pasa si R4 es mayor a 2032? b) ¿Cómo cambiarı́a el resultado del ejercicio si se utilizara una caché asociativa por conjuntos de 2 vı́as con lı́neas de 8 palabras y algoritmo de reemplazo LRU? 6