Vous êtes sur la page 1sur 22

Digital Design and

Computer Architecture
David Money Harris & Sarah L. Harris
Morgan Kaufman - 2007

Traduccin parcial del Captulo 8


Dr. Ing. Armando D. Assandri
Ctedra Electrnica Digital II
2013

8
Sistemas de Memoria
8.1 INTRODUCCIN

El rendimiento de un sistema de cmputo depende del sistema de memoria as como de la


microarquitectura del procesador. En el Captulo 7 se asumi un sistema de memoria ideal
que podra ser accedido en un solo ciclo de reloj. Sin embargo, esto slo podra ser cierto para
una memoria muy pequea, o un procesador muy lento! Los procesadores antiguos eran relativamente lentos, de manera que la memoria era capaz de seguirles el ritmo. Pero la velocidad
del procesador se ha incrementado a una tasa ms rpida que la de la memoria. Las memorias
DRAM actualmente son de 10 a 100 veces ms lentas que los procesadores. La brecha creciente entre las velocidades de los procesadores y de la memoria DRAM demanda sistemas de
memoria cada vez ms ingeniosos, para tratar de aproximarse a una memoria que sea tan rpida como el procesador. Este captulo investiga los sistemas de memoria prcticos y considera las relaciones de compromiso entre velocidad, capacidad y costo.
El procesador se comunica con el sistema de memoria a travs de una interfaz a memoria. La
Figura 8.1 muestra un interfaz a memoria simple usada en el procesador multiciclo MIPS. El
procesador enva al sistema de memoria una direccin por el bus de Direcciones. Para una
lectura, MemWrite es 0 y la memoria retorna un dato por el bus ReadData. Para una escritura,
MemWrite es 1 y el procesador enva datos a memoria por el bus WriteData.
El asunto principal en el diseo del sistema de memoria se puede explicar en trminos generales usando una metfora de libros en una biblioteca. Una biblioteca contiene muchos libros en
las estanteras. Si alguien est escribiendo un ensayo sobre el significado de los sueos, podra
ir a la biblioteca1 y sacar de la estantera La Interpretacin de los Sueos de Freud y llevarlo a
su cubculo. Despus de echarle una mirada, podra ponerlo en su lugar y sacar La Psicologa
del Inconsciente de Jung. Luego podra volver por otra cuota de La Interpretacin de los Sueos, seguida de otro viaje a las estanteras por El Ego y Yo de Freud. Muy pronto se cansara
de caminar desde su cubculo a las estanteras. Si es inteligente, podra ahorrar tiempo
1

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.

Figura 8.1 Interfaz a Memoria


manteniendo los libros en su cubculo en lugar de andar llevndolos de aqu para all. Adems, cuando saca un libro de Freud, tambin podra sacar varios de sus otros libros del mismo
estante.
Esta metfora enfatiza el principio, introducido en la Seccin 6.2.1, de hacer rpido el caso
comn. Manteniendo en su cubculo los libros que ha usado recientemente o que probablemente podra usar en el futuro, se reduce la cantidad de viajes consumidores de tiempo a las
estanteras. En particular, se usan los principios de localidad temporal y espacial. Localidad
temporal significa que si ha usado recientemente un libro, es probable que lo use de nuevo
pronto. Localidad espacial significa que cuando usa un libro en particular, es probable que se
interese por otros libros del mismo estante.
La biblioteca por s misma hace rpido el caso comn usando este principio de localidad. La
biblioteca no tiene ni el espacio de estantes ni el presupuesto para alojar todos los libros del
mundo. En vez de eso, almacena algunos de los libros menos usados en el stano. Adems,
puede tener un acuerdo de prstamo interbibliotecario con bibliotecas cercanas de manera que
puede ofrecer ms libros de los que fsicamente tiene.
En resumen, se obtienen los beneficios de tener una gran coleccin y acceso rpido a los libros ms usados por medio de una jerarqua de almacenamiento. Los libros ms usados estn
en su cubculo. Una coleccin ms grande est en las estanteras. Y una coleccin an ms
grande est disponible, con aviso previo, del stano o de otras bibliotecas. De forma similar,
los sistemas de memoria usan una jerarqua de almacenamiento para acceder rpidamente a
los datos ms usados, manteniendo an la capacidad de almacenar grandes cantidades de datos.
Los subsistemas de memoria usados para construir esta jerarqua fueron presentados en la
seccin 5.5. Las memorias de las computadoras estn construidas principalmente con RAM
dinmica (DRAM) y esttica (SRAM). Idealmente, el sistema de memoria de una computadora es rpido, grande y barato. En la prctica, una memoria individual slo tiene dos de estos
tres atributos; o es lenta, o pequea, o cara. Pero los sistemas de computacin pueden aproximar el ideal combinando una memoria rpida, pequea y barata con una memoria lenta, grande y barata. La memoria rpida almacena los datos e instrucciones ms usados, de manera que
en promedio el sistema de memoria parece rpido. La memoria grande almacena el resto de
los datos e instrucciones, de manera que la capacidad total es grande. La combinacin de dos
2

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.

Figura 8.2 Rendimiento divergente de procesador y memoria


La DRAM pudo mantener el ritmo con los procesadores en los 70 y a principios de los 80,
pero desgraciadamente ahora es muy lenta. El tiempo de acceso de una DRAM es de uno a
dos rdenes de magnitud ms largo que el tiempo de ciclo de un procesador (decenas de nanosegundos, comparado con menos de un nanosegundo).
Para contrarrestar esta tendencia, las computadoras almacenan los datos e instrucciones ms
usados en una memoria rpida pero ms pequea, llamada cach. La cach usualmente est
construida con SRAM en el mismo chip que el procesador. La velocidad de la cach es comparable con la del procesador, debido a que la SRAM es inherentemente ms rpida que la
DRAM, y debido a que la memoria en el chip elimina los prolongados retardos causados por
el recorrido a y desde un chip separado. En 2006, los costos de la SRAM en el chip eran del
3

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.

Figura 8.3 Una jerarqua de memoria tpica


La Seccin 8.2 presenta el anlisis del rendimiento del sistema de memoria. En la Seccin 8.3
se exploran varias organizaciones de cach, y en la Seccin 8.4 se profundiza en los sistemas
4

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.

Figura 8.4 Componentes de la jerarqua de memoria,


con caractersticas tpicas del 2006

8.2 ANLISIS DEL RENDIMIENTO DEL SISTEMA DE MEMORIA


Los diseadores (y los que compran computadoras) necesitan formas cuantitativas de medir el
rendimiento de los sistemas de memoria para evaluar los compromisos costo/beneficio de
diversas alternativas. Las mtricas del rendimiento del sistema de memoria son la tasa de fallos (miss rate) o la tasa de aciertos (hit rate) y el tiempo de acceso promedio a memoria. Las
tasas de fallos y aciertos se calculan como:

(8.1)

Ejemplo 8.1 CLCULO DEL RENDIMIENTO DE LA CACH


Suponga que un programa tiene 2000 instrucciones de acceso a datos (cargas y almacenamientos), y 1250 de estos valores de los datos requeridos se encuentran en la cach. Los otros

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?

Solucin: La tasa de fallos es 750/2000 = 0,375 = 37,5%. La tasa de aciertos es 1250/2000 =


0,625 = 1 0,375 = 62,5%

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)

son los tiempos de acceso de la cach, la memoria principal y la


y
son las tasas de fallos de la cach y de la memoria prin-

Ejemplo 8.2 CLCULO DEL TIEMPO PROMEDIO DE ACCESO A MEMORIA


Suponga que un sistema de cmputo tiene una organizacin de memoria con una jerarqua de
slo dos niveles, una cach y memoria principal. Cul es el tiempo promedio de acceso a
memoria dados los tiempos de acceso y tasas de fallos mostrados en la Tabla 8.1?

Solucin: El tiempo promedio de acceso a memoria es 1 + 0,1(100) = 11 ciclos.


Tabla 8.1 Tiempos de acceso y tasas de fallos
Nivel de
Memoria

Tiempo de Acceso
(Ciclos)

Tasa de
Fallos

Cach

10%

Memoria Principal

100

0%

Ejemplo 8.3 CMO MEJORAR EL TIEMPO DE ACCESO


Un tiempo promedio de acceso a memoria de 11 ciclos significa que el procesador gasta diez
ciclos esperando los datos por cada ciclo que realmente los usa. Qu tasa de fallos de la cach se requiere para reducir el tiempo promedio de acceso a memoria a 1,5 ciclos dados los
tiempos de acceso de la Tabla 8.1?

Solucin: Si la tasa de fallos es m, el tiempo promedio de acceso es 1 + 100m. Fijando este


tiempo en 1,5 y resolviendo para m, se requiere una tasa de fallos de la cach de 0,5%.
6

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.

8.3.1 Qu Datos se Tienen en la Cach?


Una cach ideal podra anticipar todos los datos requeridos por el procesador y buscarlos antes de tiempo en la memoria principal, de manera que la cach tenga una tasa de fallos de cero. Debido a que es imposible predecir el futuro con exactitud perfecta, la cach debe suponer
qu datos sern necesarios en base al patrn pasado de accesos a memoria. En particular, la
cach explota la localidad temporal y espacial para obtener una tasa de fallos baja.
7

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.

8.3.2 Cmo se Encuentran los Datos?


Una cach est organizada en S conjuntos, cada uno de los cuales tiene uno o ms bloques de
datos. La relacin entre la direccin del dato en memoria principal y la ubicacin de ese dato
en la cach se llama funcin de correspondencia (mapping). Cada direccin de memoria se
corresponde con exactamente un conjunto en la cach. Algunos de los bits de direccin se
usan para determinar qu conjunto de la cach contiene el dato. Si el conjunto contiene ms
de un bloque, el dato puede estar almacenado en cualquier bloque del conjunto.
Las cachs estn categorizadas en base a la cantidad de bloques en un conjunto. En una cach
con correspondencia directa (direct mapped), cada conjunto contiene exactamente un bloque,
de manera que la cach tiene S = B conjuntos. As, una direccin particular de memoria principal corresponde a un nico bloque en la cach. En una cach asociativa de conjuntos de N
vas, cada conjunto contiene N bloques. La direccin todava se corresponde a un nico conjunto, con S = B/N conjuntos. Pero el dato de esa direccin puede ir en cualquiera de los N
bloques en ese conjunto. Una cach completamente asociativa (fully associative) tiene slo un
conjunto (S = 1). El dato puede ir en cualquiera de los B bloques del conjunto. Por consiguiente, una cach completamente asociativa es otro nombre para una cach asociativa de
conjuntos de B vas.
Para ilustrar estas organizaciones de la cach, se considerar el sistema de memoria del MIPS
con direcciones y palabras de 32 bits. La memoria es direccionable por byte, y cada palabra
tiene cuatro bytes, por lo que la memoria consta de 230 palabras alineadas en los lmites de
palabra. Se analizan cachs con capacidad para 8 palabras (C), por simplicidad. Se comienza
con un tamao de bloque de una palabra (b), y luego se generaliza para bloques ms grandes.

Cach de Correspondencia Directa


Una cach de correspondencia directa tiene un bloque en cada conjunto, por lo que est organizada en S = B conjuntos. Para entender la correspondencia de las direcciones de memoria
con los bloques de memoria, imagine como que la memoria principal se est haciendo corresponder con bloques de b palabras, justo como es la cach. Una direccin en el bloque 0 de la
memoria principal se corresponde con el conjunto 0 de la cach. Una direccin en el bloque 1
de la memoria principal se corresponde con el conjunto 1 de la cach, y as sucesivamente
hasta que una direccin en el bloque B 1 de la memoria principal se corresponde con el conjunto B 1 de la cach. No hay ms bloques en la cach, por lo que la funcin de correspondencia se reinicia en forma cclica, de manera que el bloque B de la memoria principal se corresponde con el conjunto 0 de la cach.

Figura 8.5 Funcin de correspondencia entre la memoria principal


y una cach de correspondencia directa
Esta funcin de correspondencia se ilustra en la Figura 8.5 para una cach de correspondencia
directa con una capacidad de ocho palabras y un tamao de bloque de una palabra. La cach
tiene ocho conjuntos, cada uno de los cuales contiene un bloque de una palabra. Los dos bits
menos significativos de la direccin siempre estn en 00, debido a que las direcciones estn
alineadas por palabra. Los siguientes log2 8 = 3 bits indican en qu conjunto se corresponde
la direccin de memoria. As, todos los datos que estn en las direcciones 0x00000004,
0x00000024, , 0xFFFFFFF4 se corresponden con el conjunto 1. De igual modo, todos los

datos que estn en las direcciones 0x00000010, , 0xFFFFFFF0 se corresponden con el


conjunto 4, etc. Cada direccin de la memoria principal se corresponde con exactamente un
conjunto en la cach.

Ejemplo 8.4 CAMPOS DE LA CACH


A cul conjunto de la cach le corresponde la direccin 0x00000014 en la Figura 8.5? Mencione otra direccin que se corresponda con el mismo conjunto.

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.

Figura 8.6 Campos de la cach para la direccin 0xFFFFFFE4 cuando


se hace la correspondencia de la cach de la Figura 8.5

10

Ejemplo 8.5 CAMPOS DE LA CACH


Encuentre la cantidad de bits de conjunto y etiqueta para una memoria cach de correspondencia directa con 1024 (210) conjuntos y un tamao de bloque de una palabra. El tamao de
la direccin es de 32 bits.

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.

Figura 8.7 Cach de correspondencia directa de 8 conjuntos


La Figura 8.7 muestra el hardware para la cach de correspondencia directa de la Figura 8.5.
La cach se arma como una SRAM de ocho entradas. Cada entrada, o conjunto, contiene una
lnea que consta de 32 bits de dato, 27 bits de etiqueta y 1 bit de vlido. La cach se accede
usando la direccin de 32 bits. Los dos bits menos significativos, los bits de desplazamiento
de byte, se ignoran para los accesos a palabra. Los prximos tres bits, los bits de conjunto,
especifican la entrada o conjunto en la cach. Una instruccin de carga lee la entrada especificada de la cach y verifica los bits de etiqueta y vlido. Si la etiqueta es igual a los 27 bits de
direccin y el bit de vlido est en 1, la cach acierta y se retorna el dato al procesador. En
11

caso contrario, la cach falla y el sistema de memoria debe buscar el dato en la memoria principal.

Ejemplo 8.6 LOCALIDAD TEMPORAL CON UNA CACH DE CORRESPONDENCIA


DIRECTA
En las aplicaciones los lazos son una fuente comn de localidad temporal y espacial. Usando
las cach de ocho entradas de la Figura 8.7, muestre el contenido de la cach despus de ejecutar el siguiente lazo tonto en cdigo ensamblador de MIPS. Asuma que la cach est vaca
inicialmente. Cul es la tasa de fallos?
loop:

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%.

Figura 8.8 Contenido de una cach de correspondencia directa

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.

Ejemplo 8.7 CONFLICTO DE BLOQUE DE LA CACH


Cul es la tasa de fallos en la cach de correspondencia directa de la Figura 8.7 cuando se
ejecuta el siguiente lazo? Asuma que la cach est vaca inicialmente.
addi
loop:

$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%.

Cach Asociativa de Conjuntos Multiva


Una cach asociativa de conjuntos de N vas reduce los conflictos proporcionando N bloques
en cada conjunto, donde se podran encontrar los datos que se hacen corresponder con ese
conjunto. Cada direccin de memoria todava se hace corresponder con un conjunto especfico, pero lo puede hacer en cualquiera de los N bloques del conjunto. Por consiguiente, una
cach de correspondencia directa es otro nombre para una cach asociativa de conjuntos de
una va. A N tambin se le llama el grado de asociatividad de la cach.
La Figura 8.9 muestra el hardware para una cach asociativa de conjuntos de C = 8 palabras y
N = 2 vas. La cach ahora slo tiene S = 4 conjuntos en lugar de 8.
As, se usan slo log2 4 = 2 bits de conjunto en lugar de 3 para seleccionar el conjunto. La
etiqueta se incrementa de 27 a 28 bits. Cada conjunto contiene dos vas o grados de asociatividad. Cada va consta de un bloque de dato y los bits de etiqueta y vlido. La cach lee los
bloques de las dos vas en el conjunto seleccionado y verifica los bits de etiqueta y vlido para

13

un acierto. Si se produce un acierto en una de las dos vas, un multiplexor selecciona el dato
de esa va.

Figura 8.9 Cach asociativa de conjuntos de dos vas


Las cachs asociativas de conjuntos generalmente tienen tasas de fallos ms bajas que las cachs de correspondencia directa de la misma capacidad, debido a que tienen menos conflictos.
Sin embargo, las cachs asociativas de conjuntos usualmente son ms lentas, y de alguna manera ms caras de construir, debido al multiplexor de salida y a los comparadores adicionales.
Tambin plantean la pregunta de cul va reemplazar cuando las dos vas estn llenas; esto se
trata ms a fondo en la seccin 8.3.3. La mayora de los sistemas comerciales usan cachs
asociativas de conjuntos.

Ejemplo 8.8 TASA DE FALLOS DE LA CACH ASOCIATIVA DE CONJUNTOS


Repetir el Ejemplo 8.7 usando la cach asociativa de conjunto de dos vas y ocho palabras de
la Figura 8.9.

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

Figura 8.10 Contenido de una cach asociativa de conjuntos de dos vas


Cach Completamente Asociativa
Una cach completamente asociativa contiene un nico conjunto con B vas, donde B es la
cantidad de bloques. Una direccin de memoria puede corresponder a un bloque en cualquiera de estas vas. Una cach completamente asociativa es otro nombre para un cach asociativa
de conjuntos de B vas con un conjunto.
La Figura 8.11 muestra la matriz de SRAM de una cach completamente asociativa con ocho
bloques. Ante el requerimiento de un dato, se deben hacer ocho comparaciones de etiqueta
(no mostradas), debido a que el dato puede estar en cualquier bloque. De forma similar, un
multiplexor 8:1 selecciona el dato correcto si se produce un acierto. La cachs completamente
asociativas suelen tener la menor cantidad de fallos por conflictos para una capacidad de cach dada, pero requieren ms hardware para realizar las comparaciones de etiqueta adicionales. Son ms apropiadas para cachs relativamente pequeas debido al gran nmero de comparadores requeridos.

Figura 8.11 Cach completamente asociativa de ocho bloques


Tamao del Bloque
Los ejemplos anteriores fueron capaces de aprovechar slo la localidad temporal, debido a
que el tamao del bloque fue de una palabra. Para explotar la localidad espacial, una cach
usa bloques ms grandes para contener varias palabras consecutivas.
La ventaja de un tamao de bloque mayor a uno es que cuando se produce un fallo y se trae la
palabra a la cach, tambin se traen las palabras adyacentes del bloque. Por lo tanto, es ms
probable que los accesos subsiguientes acierten debido a la localidad espacial. Sin embargo,
un tamao de bloque grande significa que una cach de tamao fijo tendr menos bloques.
Esto puede llevar a ms conflictos, incrementando la tasa de fallos. Adems, requiere ms
tiempo traer el bloque de cach no encontrado despus de un fallo, debido a que se trae de
memoria principal ms de una palabra de datos. El tiempo requerido para cargar el bloque
15

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.

Figura 8.12 Cach de correspondencia directa con dos conjuntos y


un tamao de bloque de cuatro palabras

Figura 8.13 Campos de la cach para la direccin 0x8000009C cuando se hace la


correspondencia a la cach de la Figura 8.12
La Figura 8.13 muestra los campos de la cach para la direccin 0x8000009C cuando se hace
corresponder en la cach de correspondencia directa de la Figura 8.12. Los bits de desplazamiento de byte siempre estn en 0 para los accesos de palabras. Los siguientes log2 b = 2 bits
de desplazamiento de bloque indican la palabra dentro del bloque. Y el bit siguiente indica el
conjunto. Los 27 bits restantes son la etiqueta. Por lo tanto, la palabra 0x8000009C se corres16

ponde con el conjunto 1, palabra 3 en la cach. El mtodo de usar tamaos de bloque ms


grandes para explotar la localidad espacial tambin se aplica a las cachs asociativas.

Ejemplo 8.9 LOCALIDAD ESPACIAL CON UNA CACH DE CORRESPONDENCIA


DIRECTA
Repetir el Ejemplo 8.6 para una cach de correspondencia directa de ocho palabras con un
tamao de bloque de cuatro palabras.

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

Tabla 8.2 Organizaciones de la cach


Organizacin

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.

8.3.3 Qu Dato se Reemplaza?


En una cach de correspondencia directa, cada direccin se corresponde con un nico bloque
y conjunto. Si cuando se debe cargar un dato un conjunto est lleno, se reemplaza el bloque en
ese conjunto con el dato nuevo. En las cachs asociativas de conjuntos y completamente asociativas, la cach debe elegir cul bloque se debe desalojar cuando un conjunto de la cach
est lleno. El principio de localidad temporal sugiere que la mejor opcin es desalojar el bloque que se us menos recientemente, debido a que es menos probable que se lo use de nuevo
pronto. As, la mayora de las cachs asociativas tienen una poltica de reemplazo denominada
menos recientemente usado (least recently used o LRU).
En una cach asociativa de conjuntos de dos vas, un bit de uso, U, indica cul va dentro del
conjunto fue la menos recientemente usada. Cada vez que una de las vas se usa, se modifica
U para indicar la otra va. Para las cachs asociativas de conjuntos con ms de dos vas, seguir
la pista de la va menos recientemente usada se vuelve complicado. Para simplificar el problema, a menudo se dividen las vas en dos grupos y U indica cul grupo de vas fue menos
recientemente usado. Ante un reemplazo, el bloque nuevo reemplaza un bloque aleatorio dentro del grupo menos recientemente usado. Tal poltica se denomina pseudo LRU y en la prctica es lo suficientemente buena.

Ejemplo 8.10 REEMPLAZO POR LRU


Muestre el contenido de una cach asociativa de conjuntos de dos vas y ocho palabras despus de ejecutar el siguiente cdigo. Asuma un reemplazo por LRU, un tamao de bloque de
una palabra y una cach inicialmente vaca.
18

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.

Figura 8.15 Cach asociativa de dos vas con reemplazo LRU


Polticas de escritura
Las secciones anteriores se enfocaron en las cargas de memoria. Los almacenamientos en
memoria, o escrituras, siguen un procedimiento similar a las cargas. Ante un almacenamiento
en memoria, el procesador verifica la cach. Si la cach falla, se trae el bloque de cach de
memoria principal a la cach, y luego se escribe la palabra apropiada en dicho bloque. Si se
acierta en la cach, simplemente se escribe la palabra en el bloque de cach.
Las cachs se clasifican en de escritura inmediata (write-through) o de escritura diferida
(write-back). En una cach de escritura inmediata, el dato escrito en un bloque de cach se
escribe simultneamente en memoria principal. En una cach de escritura diferida, se asocia
un bit de modificado (o dirty bit) (D) con cada bloque de la cach. D vale 1 cuando se ha escrito en el bloque de cache y 0 en caso contrario. Los bloques de cach modificados se reescriben en memoria principal slo cuando se los desaloja de la cach. Una cach de escritura
inmediata no requiere del bit de modificado pero usualmente requiere ms escrituras a memo19

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.

Ejemplo 8.12 ESCRITURA INMEDIATA VERSUS ESCRITURA DIFERIDA


Suponga que una cach tiene un tamao de bloque de cuatro palabras. Cuntos accesos a
memoria principal se requieren para el siguiente cdigo cuando se usa cada poltica de escritura: inmediata o diferida?
sw $t0, 0x0($0)
sw $t0, 0xC($0)
sw $t0, 0x8($0)
sw $t0, 0x4($0)

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

Vous aimerez peut-être aussi