Académique Documents
Professionnel Documents
Culture Documents
Computer Architecture
David Money Harris & Sarah L. Harris
Morgan Kaufman - 2007
8
Sistemas de Memoria
8.1 INTRODUCCIN
Nos damos cuenta que el uso de la biblioteca est cayendo en picada entre los estudiantes universitarios debido
a Internet. Pero tambin creemos que las bibliotecas contienen grandes tesoros de conocimiento humano ganado
con mucho esfuerzo que no est disponible en formato electrnico. Esperamos que la bsqueda en la Web no
desplace totalmente el arte de investigar en la biblioteca.
memorias baratas es mucho menos cara que una nica memoria grande y rpida. Estos principios se extienden al uso de toda una jerarqua de memorias de capacidad creciente y velocidad
decreciente.
La memoria de una computadora generalmente est construida con chips de DRAM. En 2006,
una PC tpica tena una memoria principal que constaba de 256 MB a 1 GB de DRAM, y la
DRAM costaba cerca de U$S 100 por gigabyte (GB). Los precios de las DRAMs han bajado
un 30% por ao durante las ltimas tres dcadas, y la capacidad de la memoria ha crecido a la
misma tasa, de manera que el costo total de la memoria en una PC ha permanecido ms o menos constante. Desafortunadamente, la velocidad de las DRAMs ha mejorado slo como un
7% por ao, mientras que el rendimiento de un procesador ha mejorado a una tasa de un 30%
a un 50% por ao, como se muestra en la Figura 8.2. La grfica muestra las velocidades del
procesador y la memoria con las velocidades de 1980 como punto de partida. En 1980, las
velocidades del procesador y la memoria eran las mismas. Pero el rendimiento ha divergido
desde entonces, con las memorias retrasndose gravemente.
orden de los U$S10.000/GB, pero la cach es relativamente pequea (de kilobytes a unos pocos megabytes), por lo que el costo total es bajo. Las cachs pueden almacenar instrucciones y
datos, pero se referir a su contenido genricamente como datos.
Si el procesador solicita datos que estn disponibles en la cach, se retornan rpido. Esto se
llama un acierto (hit) de cach. En caso contrario, el procesador recupera los datos de la memoria principal (DRAM). Esto se llama un fallo (miss) de cach. Si la cach acierta la mayor
parte del tiempo, el procesador rara vez tiene que esperar a la memoria principal lenta, y el
tiempo de acceso promedio es bajo.
El tercer nivel en la jerarqua de memoria es el disco duro, o unidad de disco duro (hard drive). De la misma manera que una biblioteca usa el stano para almacenar libros que no caben
en las estanteras, los sistemas de cmputo usan el disco duro para almacenar datos que no
caben en la memoria principal. En 2006, un disco duro costaba menos de 1 U$S/GB y tena
un tiempo de acceso de unos 10 ms. El costo de los discos duros ha disminuido un 60%/ao,
pero los tiempos de acceso apenas mejoraron. El disco duro proporciona la ilusin de tener
ms capacidad que la que realmente existe en la memoria principal. De esa manera se denomina memoria virtual. Como los libros en el stano, lleva un tiempo largo acceder a los datos
de la memoria virtual. La memoria principal, tambin llamada memoria fsica, contiene un
subconjunto de la memoria virtual. Por lo tanto, la memoria principal se puede ver como una
cach de los datos ms usados del disco duro.
La Figura 8.3 resume la jerarqua de memoria del sistema de cmputo tratado en el resto de
este captulo. El procesador primero busca el dato en una cach pequea, pero rpida, ubicada
en el mismo chip. Si el dato no est disponible en la cach, el procesador luego mira en la
memoria principal. Si el dato tampoco est ah, el procesador busca el dato en la memoria
virtual en el disco duro, grande, pero lento. La Figura 8.4 ilustra este compromiso entre capacidad y velocidad en la jerarqua de memoria y lista los costos y tiempos de accesos tpicos
con la tecnologa de 2006. A medida que disminuye el tiempo de acceso, se incrementa la
velocidad.
de memoria virtual. Para concluir, este captulo explora cmo pueden acceder los procesadores a los dispositivos de entrada y salida, tales como teclados y monitores, de una manera muy
similar a como acceden a memoria. La Seccin 8.5 investiga tal E/S mapeada en memoria.
(8.1)
750 valores de los datos son suministrados al procesador por la memoria principal o la memoria en disco. Cules son las tasas de fallos y aciertos de la cach?
El tiempo promedio de acceso a memoria (average memory access time AMAT) es el tiempo
promedio que un procesador debe esperar a la memoria por cada instruccin de carga o almacenamiento. En el sistema de cmputo tpico de la Figura 8.3, el procesador primero mira los
datos que estn en la cach. Si la cach falla, el procesador luego mira en la memoria principal. Si la memoria principal falla, el procesador accede a la memoria virtual en el disco duro.
As, el AMAT se calcula como:
(
Donde
,
y
memoria virtual, y
cipal, respectivamente.
(8.2)
Tiempo de Acceso
(Ciclos)
Tasa de
Fallos
Cach
10%
Memoria Principal
100
0%
Como palabras de advertencia, las mejoras del rendimiento no siempre podran ser tan buenas
como suenan. Por ejemplo, haciendo el sistema de memoria diez veces ms rpido no necesariamente va a hacer que un programa de la computadora se ejecute diez veces ms rpido. Si
el 50% de las instrucciones de un programa son cargas y almacenamientos, una mejora de 10
veces en el sistema de memoria slo significa una mejora de 1,82 veces en el rendimiento del
programa. Este principio general se llama Ley de Amdahl, que dice que el esfuerzo empleado
en incrementar el rendimiento de un subsistema vale la pena slo si el subsistema afecta un
porcentaje alto del rendimiento total.
8.3 CACHS
Una cach contiene datos de memorias usados comnmente. La cantidad de palabras de datos
que puede contener es llamada la capacidad, C. Debido a que la capacidad de la cach es ms
pequea que la de la memoria principal, el diseador de sistemas de cmputo debe elegir qu
subconjunto de la memoria principal se mantiene en la cach.
Cuando el procesador intenta acceder a un dato, primero verifica si est en la cach. Si la cach acierta, el dato est disponible de inmediato. Si la cach falla, el procesador busca el dato
en la memoria principal y lo coloca en la cach para uso futuro. Para alojar el dato nuevo, la
cach debe reemplazar un dato viejo. Esta seccin investiga estos temas del diseo de cachs
respondiendo las siguientes preguntas: (1) Qu datos se tienen en la cach? (2) Cmo se
encuentran los datos? y (3) Qu dato se reemplaza para hacerle lugar a un dato nuevo cuando
la cach est llena?
Cuando se lean las prximas secciones, tenga en mente que la motivacin principal al responder estas preguntas es la localidad espacial y temporal inherente de los accesos a los datos en
la mayora de las aplicaciones. Las cachs usan la localidad espacial y temporal para predecir
qu dato se necesitar a continuacin. Si un programa accede a los datos en un orden aleatorio, no se beneficiara de la cach.
Como se explica en las secciones siguientes, las cachs se especifican por su capacidad (C),
cantidad de conjuntos (S), tamao del bloque (b), cantidad de bloques (B) y grado de asociatividad (N).
Aunque el texto se enfoca en las cargas de la cach de datos, los mismos principios de aplican
a las bsquedas en la cach de instrucciones. Las operaciones de almacenamiento en la cach
de datos son similares y se tratan con ms detalle en la Seccin 8.3.4.
Recuerde que la localidad temporal significa que es probable que el procesador acceda a una
porcin de datos de nuevo en breve si ha accedido a esos datos recientemente. Por lo tanto,
cuando el procesador carga o almacena datos que no estn en la cach, los datos se copian en
la cach desde la memoria principal. Las solicitudes subsecuentes a los datos acertarn en la
cach.
Recuerde que la localidad espacial significa que, cuando el procesador acceda a una porcin
de datos, tambin es probable que se acceda a datos en ubicaciones cercanas de la memoria.
Por lo tanto, cuando la cach va a buscar una palabra en la memoria, tambin busca varias
palabras adyacentes. Este grupo de palabras se llama bloque de cach. La cantidad de palabras que hay en el bloque de cach, b, se llama tamao del bloque. Una cach de capacidad C
contiene B = C/b bloques.
Los principios de localidad temporal y espacial han sido verificados experimentalmente en
programas reales. Si se usa una variable en un programa, es probable que se use de nuevo la
misma variable, creando localidad temporal. Si se usa un elemento de una matriz, es probable
que se usen otros elementos de la misma matriz, creando localidad espacial.
Solucin: Los dos bits menos significativos de la direccin son 00, debido a que la direccin
est alineada por palabra. Los siguientes tres bits son 101, por lo que la palabra se corresponde con el conjunto 5. Todas las palabras con las direcciones 0x34, 0x54, 0x74, ,
0xFFFFFFF4 se corresponden con el mismo conjunto.
Debido a que muchas direcciones se corresponden con un nico conjunto, la cach tambin
debe seguir la pista de las direcciones de los datos realmente contenidos en cada conjunto.
Los bits menos significativos de la direccin especifican cul conjunto tiene el dato. Los bits
ms significativos restantes se denominan la etiqueta e indican cul de las muchas posibles
direcciones est contenida en ese conjunto.
En el ejemplo anterior, los dos bits menos significativos de la direccin de 32 bits se denominan el desplazamiento de byte (byte offset), debido a que indican el byte dentro de una palabra. Los prximos tres bits se denominan bits de conjunto, debido a que indican el conjunto
con el que se hace corresponder la direccin. (En general, la cantidad de bits de conjunto es
log2 S). Los restantes 27 bits de etiqueta indican la direccin de memoria del dato almacenado
en un conjunto dado de la cach. La Figura 8.6 muestra los campos de la cach para la direccin 0xFFFFFFE4. Se corresponde con el conjunto 1 y su etiqueta son todos unos.
10
Solucin: Una cach con 210 conjuntos requiere log2 (210) = 10 bits de conjunto. Los dos bits
menos significativos de la direccin son el desplazamiento de byte, y los 32 10 2 = 20 bits
restantes forman la etiqueta.
A veces, como cuando la computadora arranca por primera vez, los conjuntos de la cach no
contienen ningn dato. La cach usa un bit de vlido (valid bit) en cada conjunto para indicar
si el conjunto tiene un dato significativo. Si el bit de vlido es 0, el contenido no tiene sentido.
caso contrario, la cach falla y el sistema de memoria debe buscar el dato en la memoria principal.
addi
beq
lw
lw
lw
addi
j
$t0,
$t0,
$t1,
$t2,
$t3,
$t0,
loop
$0,
5
$0,
done
0x4($0)
0xC($0)
0x8($0)
$t0,
-1
done:
Solucin: El programa contiene un lazo que se repite cinco iteraciones. Cada iteracin involucra tres accesos a memoria (cargas), dando un total de 15 accesos a memoria. La primera
vez que se ejecuta el lazo, la cach est vaca y los datos deben ser buscados en la ubicaciones
de memoria principal 0x4, 0xC y 0x8 y llevados a los conjuntos 1, 3 y 2 de la cach, respectivamente. Sin embargo, la prximas cuatro veces que se ejecuta el lazo, los datos se encuentran en la cach. La Figura 8.8 muestra el contenido de la cach durante la ltima peticin a la
direccin de memoria 0x4. Las etiquetas estn todas en 0 debido a que los 27 bits ms significativos de las direcciones son 0. La tasa de fallos es 3/15 = 20%.
12
Cuando dos direcciones que se han accedido recientemente se corresponden con el mismo
bloque de la cach, ocurre un conflicto, y la direccin accedida ms recientemente desaloja a
la anterior del bloque. Las cachs de correspondencia directa slo tienen un bloque en cada
conjunto, de manera que dos direcciones que se corresponden con el mismo conjunto siempre
causan un conflicto. El siguiente ejemplo ilustra los conflictos.
$t0,
beq
lw
lw
addi
j
$0,
$t0,
$t1,
$t2,
$t0,
loop
5
$0,
done
0x4($0)
0x24($0)
$t0,
-1
done:
Solucin: Las dos direcciones 0x4 y 0x24 se corresponden con el conjunto1. Durante la ejecucin inicial del lazo, se carga en el conjunto 1 de la cach el dato contenido en la direccin
0x4. Luego el dato de la direccin 0x24 se carga en el conjunto 1, desalojando el dato de la
direccin 0x4. Con la segunda ejecucin del lazo, el patrn de repite y la cach debe buscar de
nuevo el dato de la direccin 0x4, desalojando el dato de la direccin 0x24. Las dos direcciones entran en conflicto y la tasa de fallos es del 100%.
13
un acierto. Si se produce un acierto en una de las dos vas, un multiplexor selecciona el dato
de esa va.
Solucin: Los dos accesos a memoria, para las direcciones 0x4 y 0x24, se corresponden con
el conjunto 1. Sin embargo, la cach tiene dos vas, por lo que puede alojar los datos de ambas
direcciones. Durante el primer bucle de la iteracin, la cach vaca falla con las dos direcciones y carga ambas palabras de datos en las dos vas del conjunto 1, como se muestra en la
Figura 8.10. En las prximas cuatro iteraciones, la cach acierta. Por consiguiente, la tasa de
fallos es 2/10 = 20%. Hay que recordar que la cach de correspondencia directa del mismo
tamao del Ejemplo 8.7 tuvo una tasa de fallos del 100%.
14
fallido se denomina penalizacin por fallo. Si las palabras adyacentes del bloque no se acceden luego, se desperdicia el esfuerzo de traerlas. Sin embargo, la mayora de los programas
reales se benefician de tamaos de bloque ms grandes.
La Figura 8.12 muestra el hardware de una cach de correspondencia directa de C = 8 palabras con un tamao de bloque b = 4 palabras. La cach ahora slo tiene B = C/b = 2 bloques.
Una cach de correspondencia directa slo tiene un bloque en cada conjunto, por lo que esta
cach est organizada como dos conjuntos. As, slo log2 2 = 1 bit se usa para seleccionar el
conjunto. Ahora se necesita un multiplexor para seleccionar la palabra dentro del bloque. El
multiplexor es controlado por log2 4 = 2 bits de desplazamiento de bloque de la direccin. Los
27 bits ms significativos de la direccin forman la etiqueta. Slo se necesita una etiqueta
para todo el bloque, debido a que las palabras en el bloque estn en direcciones consecutivas.
Solucin: La Figura 8.14 muestra el contenido de la cach despus del primer acceso a memoria. En la primera iteracin del bucle, la cach falla en el acceso a la direccin de memoria
0x4. Este acceso carga los datos de la direccin 0x0 hasta la 0xC en el bloque de la cach.
Todos los accesos subsiguientes (como se muestra para la direccin 0xC) aciertan en la cach.
Por consiguiente, la tasa de fallos es 1/15 = 6,67%.
Figura 8.14 Contenido de la cach con un tamao de bloque (b) de cuatro palabras
Poniendo Todo Junto
Las cachs estn organizadas como matrices de dos dimensiones. Las filas de llaman conjuntos y las columnas se llaman vas. Cada entrada en la matriz consta de un bloque de datos y
sus bits de etiqueta y vlido asociados. Las cachs se caracterizan por
capacidad C
tamao de bloque b (y cantidad de bloques, B = C/b)
cantidad de bloques en un conjunto (N)
La Tabla 8.2 resume las diversas organizaciones de las cachs. Cada direccin de memoria se
corresponde con un solo conjunto, pero se puede almacenar en cualquiera de las vas.
La capacidad de la cach, la asociatividad, el tamao del conjunto y el tamao del bloque son
tpicamente potencias de 2. Esto hace que los campos de la cach (etiqueta, conjunto y los bits
de desplazamiento de bloque) sean subconjuntos de los bits de direccin.
17
Cantidad de Vas
(N)
Cantidad de
Conjuntos (S)
correspondencia
directa
asociativa de
conjuntos
1<N<B
B/N
totalmente asociativa
El incremento de la asociatividad, N, usualmente reduce la tasa de fallos causada por los conflictos. Pero una asociatividad mayor requiere ms comparadores de etiqueta. El incremento
del tamao del bloque, b, aprovecha la localidad espacial para reducir la tasa de fallos. Sin
embargo, disminuye la cantidad de conjuntos en una cach de tamao fijo y por lo tanto puede
llevar a tener ms conflictos. Tambin incrementa la penalizacin por fallos.
lw $t0, 0x04($0)
lw $t1, 0x24($0)
lw $t2, 0x54($0)
Solucin: Las primeras dos instrucciones cargan los datos desde las direcciones de memoria
0x4 y 0x24 en el conjunto 1 de la cach, mostrado en la Figura 8.15(a). U = 0 indica que el
dato en la va 0 fue el menos recientemente usado. El prximo acceso a memoria, a la direccin 0x54, tambin se corresponde con el conjunto 1 y reemplaza el dato menos recientemente usado que est en la va 0, como se muestra en la Figura 8.15(b). El bit de uso, U, se pone
en 1 para indicar que el dato en la va 1 fue el menos recientemente usado.
ria principal que una cach de escritura diferida. Las cachs modernas usualmente son de escritura diferida, debido a que el tiempo de acceso a memoria principal es tan largo.
Solucin: Las cuatro instrucciones de almacenamiento escriben en el mismo bloque de cach. Con una cach de escritura inmediata, cada instruccin de almacenamiento escribe una
palabra en memoria principal, requiriendo cuatro escrituras en memoria principal. Una poltica de escritura diferida requiere slo un acceso a memoria principal, cuando se desaloja el
bloque de cach modificado.
20