lab 03 - cache
TRANSCRIPT
![Page 1: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/1.jpg)
1
Arquitectura de las Computadoras Laboratorio Nº 3
Estudio de memorias cache
Ing. Walter Lozano
Ing. Alejandro Rodríguez Costello
Objetivos
El presente laboratorio pretende ilustrar el funcionamiento de las memorias caché a
través del uso del simulador Dinero III1 y su interface gráfica Xcache32.
El usuario puede configurar todas las características del sistema mediante ventanas
interactivas. El simulador es trace-driven, la entrada es un archivo de trazas de
memoria. Cuando el procesador accede a memoria, coloca una determinada
información en su bus de direcciones. Esta información puede ser recogida por
software o hardware y almacenada en un archivo. Por tanto, los archivos de trazas no
son más que archivos cuyos registros poseen información referente a la dirección de
memoria accedida por el procesador, al tipo de acceso del que se trata (lectura o
escritura) y el tipo de información al que se está accediendo (datos o instrucciones).
Esto es lo habitual en los estudios de prestaciones de sistemas de memoria. No
interesa que la entrada de datos sea código máquina, que necesariamente es
dependiente del procesador, ni código de alto nivel, donde es difícil aislar los accesos
al sistema de memoria. Por el contrario, un fichero de trazas de memoria sólo incluye
la información relevante desde el punto de vista del sistema de memoria.
El simulador dinero y Xcache32
El punto de partida de la simulación, como mencionamos, lo constituye un fichero
que contiene la traza de la ejecución de un programa. Esta traza, nos muestra las
referencias a memoria que el programa efectúa durante su ejecución. El fichero de
traza para el programa Dinero se compone de líneas de texto que constituyen
referencias a memoria. Estas líneas constan de dos números que indican,
respectivamente, el tipo de referencia y la dirección de memoria a la cual se hace
referencia. Los ficheros de traza se guardan con la extensión .din.
Existen cinco tipos de referencias a memoria. Cada uno de ellos se identifica por un
valor según se indica la tabla 1, donde los últimos 2 tipos de referencia son ignorados
por Xcache32.
1 Hay versiones más actualizadas que no serán usadas actualmente por la cátedra.
![Page 2: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/2.jpg)
2
Tipo de referencia Identificador
Lectura de datos 0
Escritura de datos 1
Busqueda de instrucción (fetch) 2
Escape (acceso desconocido) 3
Vaciado (flush) de cache 4
Tabla 1: Tipos de referencias a memoria
Ejemplo de archivo de traza donde la primer columna indica
el tipo de operación y la segunda es la dirección del dato en
cuestión. Las direcciones son de 32 bits en formato
hexadecimal. El simulador sólo lee las 2 primeras columnas,
el resto será ignorado, de modo que se pueden agregar
comentarios2.
Pasos para realizar la simulación:
1. Cargar archivo de trazas y configurar la cache.
En la opción SIMULATION, elegir RUN DINERO.
Aquí se elige el archivo de entrada con las trazas, (de extensión DIN) y el
archivo de salida, que será de extensión OUT.
Igualmente se seleccionan los parámetros de la caché, que se explican más
adelante.
2. Ejecutar la simulación.
Existen dos opciones: ver el archivo de resultados (FILE - OPEN DINERO
OUTPUT FILE) ó ejecutar paso a paso la simulación, que es la que nos
interesa.
Configuración de la cache
La configuración de la cache se puede apreciar en la ventana mostrada en la figura 1
cuyos parámetros pasaremos a explicar a continuación:
Files (archivos)
� Input: (Entrada) Ingresamos el archivo de trazas
� Output: (salida) Nombre del archivo donde se guardaran los resultados
General Options (opciones generales)
� Unified cache: (cache unificada) Seleccionamos si queremos una cache en
donde se guarden datos e instrucciones.
2 el formato es muy similar al simulador SYSMEC98 usado anteriormente por la cátedra
2 00000000
0 00000000
2 00000004
0 00000040
2 0000000c
0 00000080
![Page 3: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/3.jpg)
3
� Associativity: Nos permite elegir la función de correspondencia o tipo de
asociación entre memoria principal y memoria cache.
Los distintos tipos de correspondencia, vistos individualmente, DINERO las
considera como casos particulares del tipo “asociativa por conjuntos”:
• Mapeado directo: associativity = 1
• Completamente asociativa: associativity = (tamaño cache)/(tamaño de bloque)
Figura 1: Opciones de la línea de commandos de Dinero
Sizes (tamaños)
� data cache: Tamaño de la cache de datos
� instr. cache: Tamaño de la cache de instrucciones, deshabilitado si se eligió
“unified cache”.
� block size: Tamaño de bloque, como usaremos words de 4bytes, deberá ser
múltiplo de 4.
� sub-block size (tamaño de sub-bloque3): No lo usaremos.
3 Los sub bloques consisten en una cantidad de palabras de tamaño inferior al bloque, que puede ser
usada como unidad de lectura/escritura en la cache. Usado en antiguos chips de cache.
![Page 4: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/4.jpg)
4
Write policy (política de escritura)4
� write back: Post escritura
� write through: Escritura directa
Write Allocation Policy (política de carga en escritura)
� write allocate: Carga en escritura
� non write allocate: Sin carga en escritura
Replacement policy (política de reemplazo)
� LRU Least Recently Used ó menos recientemente utilizada
� FIFO First In First Out
� random: Aleatoria
Reference counts: (conteo de referencias)
� skip: número de referencias (líneas del archivo de trazas) a saltearse, contando
desde el inicio
� flush: número de referencias entre descargas de caché. (0: nunca)
� max: número máximo de referencias a ejecutar a partir de aquellas que hayan
sido salteadas (opción skip)
fetch policy (politica de carga5)
� demand fetch: (carga bajo demanda): Se cargan bloques a memoria cache solo
si son pedidos.
� always prefetch: (siempre precarga) cada vez que se hace una carga se cargan
tambien bloques adicionales.
� miss prefetch: precarga sólo en caso de fallo (miss).
� tagged prefetch: precarga con etiqueta -No lo usaremos, se explica más
adelante-
Las siguientes opciones no se usarán, look-foward prefet, subblock prefetch, y son
sólo aplicables si se trabaja con subbloques.
� prefetch distance (longitud de precarga): Indica el número de subbloques que
se precargarán, en caso de que esté habilitado. Si no lo está, representa la
cantidad de bloques.
Output style (sin uso)
� terse: Escribe los resultados al final de la simulación.
� Verbose: Escribe los resultados luego del medio millón de referencias y al
final de la simulación
debug (sin uso)
� -opción para depuración del simulador- no se usará.
4 No se cuenta con la opción de usar buffer en ningún caso.
5 Se entiende por “carga” el hecho de copiar en memoria cache lo leído de memoria principal
![Page 5: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/5.jpg)
5
Configuración del acceso a bloques de memoria
La configuración del acceso a bloques de memoria se muestra en la figura 2 y no se
usará en la realización de este laboratorio, por lo que se comentará brevemente lo más
importante. Aquellos alumnos con interés particular en el acceso a memorias
dinámicas pueden ahondar opcionalmente con alguna actividad de ensayo propuesta y
documentada optativamente.
Figura 2: Configuración del acceso a bloques de memoria
memory bus width in words
Numero de words que son transferidos simultáneamente a la caché. Si resulta ser
mayor que el tamaño de word, se leerá la cantidad suficiente para llenar un (sub-)
bloque de caché. Usado tanto para datos como para instrucciones. Debe ser un
múltiplo del tamaño de word. Si se definió subbloques, el ancho no puede ser mayor a
este. Si no hay subbloques, el ancho no puede ser mayor al tamaño de bloque
read access time in cycles
� first address setup: RAS + RAS to CAS + CAS
� first data transfer: CAS delay
� subsequent address setup: only the CAS time involved with the same RAS
info. Depende del llamada “command rate” de la memoria, suele variar entre 1
y 2 se suele llamar Tx
� subsequente data transfer: Depende del tipo de DDR. 3 words por ciclo para
DDR3
![Page 6: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/6.jpg)
6
Interpretación de la interfaz de resultados
Figura 3: Vista general del conjunto de ventanas de resultados.
Donde la configuración para este ejemplo es:
Figura 4: Parte de la ventana de configuración del ejemplo de la figura 3.
Podemos resumir la configuración:
División Separada
Nº de vias (asociatividad) 3
Nº de conjuntos Datos: 4 Instrucc: 3
Tamaño (bytes) Datos: 240 Instrucc: 180
El archivo de trazas es “ex1.din” que viene incluido con el programa Xcache32 y está
en el directorio de instalación del mismo.
![Page 7: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/7.jpg)
7
� Botones de menú
Figura 5: Barra de menú
Ventana de trazas
Titulada “DINERO-Input”, muestra la línea del archivo de trazas que se está
ejecutando, resaltando en rojo la última línea ejecutada.
� line: el nº de línea del archivo
� acc.: tipo de instrucción.
Fetch: Lectura de instrucción
Read: Lectura de un dato
� address: Dirección de memoria principal accedida.
Color window
� Invalid: El bloque fué cargado y descargado de la cache.
� Cache hit: Se halló la direccion de memoria requerida en la cache.
Fallos de cache: (ver “clasificacion de fallos” mas adelante)
� Capacity miss: Fallo de capacidad
� Conflict miss: Fallo de conflicto
� Compulsory miss: Fallo forzoso
� Block set dirty: Se escribió en la cache, pero aún no en MP, Por tanto, hay un
problema de consistencia (contenido de la caché difiere con el de la memoria
principal).
� Block written: Bloque escrito
Timing window
Esta ventana brinda estadísticas del acceso a memoria, a saber:
� Number of read accesses: numero de accesos a memoria para lectura
� number of words read: número de words leidos
� Cycles used for write accesses: ciclos usados para accesos de escritura:
� Total accesses: número total de accesos
![Page 8: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/8.jpg)
8
� Total words written: numero total de palabras escritas
� Total cycles for memory accesses6
data/instruction memory status
Estas ventanas muestran el estado de la memoria. Cada cuadrado corresponde a un
word en memoria. Al principio de cada línea, se muestra la dirección del primer word
de la línea.
Los bloques actualmente cargados en memoria figuran en verde, y aquellos que
fueran cargados y descargados, aparecen en rojo.
El rango de memorias a mostrar se puede especificar con la
opción “Address range” del menú contextual, que ofrece 2
opciones, una es “adjusto to stream”; el autoajuste de
acuerdo a los datos del archivo de trazas, y la otra opción
es “Define...” que muestra el cuadro de dialogo de la
derecha. Esta última es la opción más recomendable, de
forma que podamos especificar el rango en unidad de
bloques, cosa que puede no suceder con el autoajuste.
� start address: dirección de inicio en hexadecimal
� number of words: número de words que se mostraran7 en hexadecimal
Recomendación:
data/instruction cache
Permite visualizar el estado de la cache. El resultado de la última operación figura
arriba a la izquierda, que en el caso de los datos, corresponde a un bloque marcado
como “sucio”. La última operación realizada figura a la derecha del anterior dato, en
este caso una escritura. El bloque de memoria caché objeto de la última operación es
6 El número de ciclos (que no usaremos en el laboratorio) se puede configurar en: Options > Memory
configuration, de la barra de menú que mostrará la ventana “memory block accesss settings”,
comentada anteriormente
7 A fines de mayor claridad, es recomendable ajustar el ancho de estas ventanas de forma que cada
línea tenga el tamaño de un bloque, es decir que por línea haya el numero de words (cuadraditos) que
corresponde al tamaño de un bloque, que es la unidad de lectura.
![Page 9: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/9.jpg)
9
marcado con el número correspondiente a la línea del archivo de trazas, en este caso,
la línea es la número 12. Información adicional aparece inmediatamente a la izquierda
del bloque anteriormente referido. En la figura aparece de color rojo, indicando que
dicho bloque de memoria principal fue cargado y descargado.
Fundamentos de cache
En esta sección repetiremos conceptos abordados en clase, aplicados a las distintas
configuraciones posibles de la caché, incluyendo posibilidades no incluidas en el
simulador, haciendo la aclaración pertinente.
El funcionamiento de las mismas se basa en dos “principios de localidad”, que es una
propiedad de los programas:
� Localidad espacial: dado un acceso a una particular zona de memoria, existe
una alta probabilidad de que sitios próximos sean tambien referenciados
durante la ejecución del programa. Debido a la secuencialidad, si se hizo
referencia al sitio S, probablemente el sitio S+1 sea referenciado pronto. A la
misma se la puede considerar un subtipo de localidad espacial.
� Localidad temporal: complementario al anterior, establece que un sitio
accedido recientemente probablemente vuelva a serlo en corto tiempo.
Las caches pueden tener distintas características que se resumen en el siguiente
cuadro que serán explicadas:
A) Nivel L1 L2 L3
B) División Unificada Separada
C) Funcion de correspondencia Directa Asociativa Asociativa por conjuntos
D) Algoritmos de reemplazo Aleatoria LRU LFU FIFO
E.1) Politica Directa Post-escritura NOTA: ambas pueden tener buffer E) Escritura
E.2) Carga bajo fallo Write allocate Non write allocate
F) Precarga Sin Siempre Bajo fallo Con etiqueta
Tabla 2: Características de caches
En la tabla 2 se muestra una vista global de la mayoría de opciones de configuración
de una cache y en la tabla 3 veremos un ejemplo de una arquitectura de Intel.
Nivel
L1 L2 L3
División Separada Unificada
Tamaño 32KB cada una 256KB 4 -16MB compartida
Tamaño de bloque 64bytes
Correspondencia
(Asociativa por conjunto)
4 vías (instrucciones)
8 vías (datos) 8 vías 16 vías
Reemplazo Variante LRU ??
Escritura Post escritura, write allocate
Prefetchers8 2 2 0
Tabla 3: Ejemplo de arquitectura Intel Nehalem (i3, i5, i7, XEON) de 2 a 12 núcleos
8 http://software.intel.com/sites/products/collateral/hpc/vtune/performance_analysis_guide.pdf
![Page 10: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/10.jpg)
10
A) Niveles de cache
El simulador Dinero III solo soporta un nivel de cache. Debido al rápido incremento
de la frecuencia de los procesadores y la creciente9 demora en el acceso a memoria
principal a medida que la misma aumenta su tamaño, surge la necesidad de contar con
más de un nivel de cache. La cache de nivel L1 (level 1), es la caché interna parte del
núcleo del microprocesador y la más rápida, la L2 es también parte del
microprocesador, pero externo al núcleo y la L3 es parte del encapsulado del
microprocesador y de las 3 la más alejada del núcleo10
. En la figura se observa una
vista microscópica de una pastilla de procesador IBM Power donde puede apreciarse
visualmente los niveles de cache que ocupan la mayoría de la superficie de la pastilla.
Figura 3: Microprocesador IBM Power 7, L2: 256Kb, L3: 32Mb
B) División
Se puede hacer una cache exclusiva tanto para datos como para instrucciones (cache
separada), que operan en paralelo, ó hacer que ambos usen la misma memoria (cache
unificada).
C) Función de correspondencia
El detalle sobre las funciones de correspondencia sobrepasa el objetivo de este
repaso11
de forma que se hará una breve mención a las mismas.
� Directa: a cada dirección de memoria principal le corresponde un sitio único
en la cache. Dicho de otra forma, dada una dirección de memoria principal,
sabemos en qué sitio de la caché debe estar, de forma que conocemos la línea
ya sea para cargarla a cache o para buscarla en la misma.
Ventajas: Sencillez, economía.
9 Es importante notar que a medida que avanza el diseño y las técnicas de fabricación, las memorias
dinámicas no lo hacen en la misma medida produciendo un gap importante.
10 Esta información es aplicable a microprocesadores recientes.
11 Ver el libro de cátedra
![Page 11: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/11.jpg)
11
Desventajas: En caso de uso de 2 bloques que tengan asignada la misma
memoria en la cache, se producirán fallos continuos mientras se accedan
alternativamente.
� Asociativa: Permite cargar un bloque de memoria principal en cualquier
posición en cache.
Ventaja: Es la forma más flexible de carga (muy usada en el nivel L1 o caches
extremadamente pequeñas)
Desventaja: Búsqueda más compleja (puede estar en cualquier sitio), mucho
más costoso (enormes comparadores).
� Asociativa por conjuntos:
Es una combinación de las anteriores. Se divide la cache en conjuntos (sets),
cada uno con un determinado número de bloques que constituyen una vía
(way). Dada una dirección en memoria principal, se le asigna un conjunto de
la cache en forma análoga a la asociación directa y luego se asigna de forma
asociativa el bloque a alguna vía dentro del conjunto donde finalmente se
cargará.
D) Algoritmos de reemplazo
Responden a la pregunta de cómo hacer sitio en la cache cuando esta está llena.
� Aleatoria: Se descarta cualquier línea. Facil implementación, pero puede
descartarse un dato muy usado
� LRU: El bloque que se usó menos recientemente, usa el principio de localidad
temporal. Requiere registrar el último momento de acceso.
� LFU: (no soportado por DINERO III) el bloque menos frecuentemente usado,
hay que recalcularlo a cada operación de cache. Usualmente: frecuencia = (nº
de accesos)/(tiempo en cache)
� FIFO: Se saca al primero que se cargó.
E) Escritura
E.1) Política de escritura
Al escribir un word que ya está en caché (acierto), se puede hacer de 2 formas:
� Directa (write trought): Se escribe la caché y la MP simultáneamente (en
paralelo). Como la MP es mucho más lenta, se pierde tiempo.
� Post escritura (write back): Se escribe solo en el cache, y en MP cuando dicha
palabra va a ser reemplazada en cache. Mientras tanto, es marcado como
“dirty” (sucio).
El uso de buffer no es soportado por Dinero III pero conlleva algunas ventajas:
� Directa: Se agrega un buffer donde se guarda el dato a guardarse en MP,
mientras, el microprocesador continúa trabajando. El buffer se vaciará cuando
finalmente sea escrito a MP.
Ventaja: Evita la espera inmediata de escritura a MP.
� Post escritura: En caso de falla de cache, normalmente se debe escribir el
bloque modificado a MP antes de cargar el bloque pedido. Para acelerar el
![Page 12: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/12.jpg)
12
proceso, el buffer se usa para guardar el bloque modificado, y mas tarde se
escribirá a MP.
Ventaja: Si se escribe varias veces el mismo bloque, (sin ser reemplazado en
cache) sólo será necesario un acceso a MP.
E.2) Carga bajo fallo
Si el word a escribir no está en caché, se puede proceder de dos formas:
� Write allocate: Se carga el word (en realidad, el bloque) a cache y luego se
escribe.
� Non write allocate: Se escribe directamente en MP, y no se carga al cache.
F) Prefetching (precarga)
Técnica que trata de anticiparse a los requerimientos del procesador cargando bloques
al cache antes de ser requeridas. Las políticas de predicción para precarga se basan
también en el principio de localidad tanto espacial como temporal. Las más usadas
son:
� Siempre (always ó fall through prefetch): Se realiza siempre que se accede a
memoria principal, pre-cargando un numero preestablecido de bloques,
intentando tomar ventaja de la localidad espacial.
� Bajo fallo (prefetch on miss): Variante de la anterior, consiste en 2
posibilidades:
Precarga de un número extra de bloques en caso de fallo (no soportado por
Dinero III).
Precarga sólo en caso de falla (no existe precarga en otro caso).
� Con etiqueta (tagged prefetch): Cada bloque tiene una etiqueta de un bit, que
indica:
0: No cargado ó cargado y no usado.
1: Fue cargado y usado.
La precarga se realiza siempre que la etiqueta haya cambiado a 1, evitándose
la precarga de bloques anteriormente cargados y descargados sin haber sido
usados.
� Basado en hilos (threaded prefetch): (No soportado por Dinero III), se basa en
una lista de de direcciones que probablemente también serán usadas. Se basa
en comportamiento ya observado (empírico).
En el ejemplo de la tabla 3 vemos que el microprocesador tiene 2 unidades de
hardware en cada cache L1 y L2 dedicadas a la predicción, para hacer precarga.
Clasificación de fallos
Los fallos de caché se clasifican en:
� Forzosos: Los producidos al acceder por primera vez a un bloque.
� De capacidad: Fallos por falta de sitio, no hay mas lugar en la cache para los
datos usados concurrentemente.
![Page 13: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/13.jpg)
13
� De conflicto: Debido a que se asigna al mismo sitio de cache un bloque que se
carga y el que se saca se necesita.
Descripción
1. Utilizando la traducción de la rutina en C bucle1.c al código assembler de MIPS
provista en el archivo bucle1.s, realice el trazado manualmente o mediante el
simulador SPIM y recoja los resultados en un archivo de trazas bucle1.prg con el
formato adecuado para simular en Dinero III suponiendo que MAX=10. En él se
incluyen tanto los accesos a códigos como a datos. Nótese que la longitud del
archivo es mucho mayor que la del código, pues en los archivos de trazas de
memoria los bucles se “desenrollan”. Considere una cache de 2 Kb de tamaño en
total, inicialmente con líneas de 8 bytes. Para las alternativas indicadas a
continuación realice la ejecución paso a paso, comprobando detalles como valor
de etiqueta, números de líneas, etc. Finalmente debe consignar en un resumen
tabular el valor de miss-rate y un breve comentario sobre lo más relevante
observado en la simulación. Por ejemplo, si hay algún conflicto digno de mención,
por qué determinada configuración mejora o empeora la situación de anteriores
pruebas, por qué algún cambio de parámetros no parece afectar los resultados, etc.
a) Caches separadas, mapeado directo.
b) Cache unificada, mapeado directo.
c) Cache unificada, asociativa por conjuntos (2 vias)
d) Cache unificada, totalmente asociativa
![Page 14: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/14.jpg)
14
e) Repita lo anterior con tamaño de línea de 16 bytes e indique los cambios
observados.
En todos los casos anteriores la escritura es:
En el bucle anterior, todas las escrituras se realizan sobre datos previamente
leídos, por lo que siempre hay aciertos en escritura. Para estudiar cómo funciona
el caché en caso de fallo en escritura, necesitamos otra traza. En concreto, obtenga
la nueva traza haciendo que el núcleo del bucle sea por ejemplo y[i]=x[i]+1, con
x[i] almacenado a partir de 0xDA100000 e y[i] almacenado a partir de
0xDA200000. Observe los resultados en las siguientes situaciones (tamaño de
línea 8 bytes):
f) Cachés separadas, mapeado directo, caché de datos CB-WA12
.
g) Caché unificada, asociativa por conjuntos (2 vías), CB-WA. Pruebe tanto
el algoritmo LRU como el aleatorio. Si observa algún cambio interesante,
indíquelo con un comentario.
h) Caché unificada, totalmente asociativa, CB-WA.
2. Usando el bucle bucle2.c estudiaremos los accesos a datos, suponiendo siempre
cachés separadas. El bucle presenta las siguientes diferencias:
• El acceso al array no es elemento a elemento, sino que hay un parámetro STEP
que establece el salto entre elementos accedidos.
• Los accesos al array son sólo de lectura.
• El tamaño del array, MAX, puede tomar el valor que más convenga.
Considere un cache de datos de 1Kb con líneas de 32 bytes, directamente
mapeado. Se pide:
a) Genere una traza con zancada tal que MR13≈1 (el peor caso, fallos continuos
en cache).
b) Genere una traza con zancada tal que MR≈0.5.
c) Genere una traza con zancada tal que MR≈0.25.
En todos los casos debe comprobar que el MR medido por el simulador coincide
con el deseado.
3. Suponga que se desean comparar dos alternativas:
• Cache A: Cachés separadas, asociativa por conjuntos, 8 conjuntos, 2 vías por
conjunto, líneas/vías de 64 bytes, CB-WA.
• Cache B: Caché unificada, mapeado directo, 32 líneas de 64bytes, CB-WA.
12
copy back (en Dinero III se llama write back) y write allocate
13 miss rate
![Page 15: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/15.jpg)
15
a) Escribir un fichero de traza (código y datos) que haga la máquina con cache A
lo más rápida posible comparada con la máquina con cache B.
b) Escribir un fichero de traza que haga la máquina con cache B lo más rápida
posible comparada con la máquina con cache A.
En ambos casos14
, debe tratarse de ficheros breves y debe aclarar con comentarios
a qué correspondería cada acceso del fichero de traza (tipo de instrucción, tipo de
dato).
4. ¿De qué forma son afectados los fallos de cache según su clasificación en los
siguientes casos?
a) Se incrementa el tamaño de cache.
b) Se incrementa el tamaño de bloque
c) Se incrementa la asociatividad
5. ¿Cómo se espera que varíen los fallos incrementando el tamaño de bloque?
6. Al usar cachés separadas para datos e instrucciones se incrementa la tasa de fallos
¿Qué ventaja tiene entonces el uso de cachés separadas?
7. Al comenzar la ejecución de un programa, ¿qué tipo de fallo se produce? ¿Se
pueden mitigar los fallos con alguna configuración en particular? Sin el uso de
alguna de las posibilidades de configuración listadas en el cuadro 2.1 ¿de que otra
forma?
8. ¿Qué algoritmo de reemplazo se usa en la caché de asociación directa?
9. ¿Qué tipo de caché según función de correspondencia es más proclive a presentar
fallos de conflicto?
Para los siguientes problemas, sean Z é Y matrices de 16*16, enteros, sin signo y
menores a 4 cifras, (las direcciones de los datos están dados en el archivo de trazas
adjunto), y la configuración de la caché para ambos es: tamaño de 12 words, tamaño
de bloque de 4 words y para el resto usar inicialmente la configuración por defecto.
10. Calcular X=Y*Z. A continuación se muestra parte del código en “C” para el
cálculo de X. su equivalente en assembler MIPS es parte del archivo adjunto.
for( i=0; i<16; i++ )
for( j=0; j<16, j++ ) for( k=0; k<16, k++ )
X(i,j) += Y(i,k) * Z(k,j)
Se pide:
a) Maximizar la tasa de aciertos y fallos cambiando el orden en memoria de
los datos de las matrices (variamos la traza) para la misma configuración
de caché. Explicar en qué consistió el cambio realizado. Variar en forma
acorde el anterior código en “C”.
b) Para las dos trazas anteriores, determinar las mejores configuraciones de
caché. Explicar porqué resultan ser las mejores configuraciones.
14
Las cachés A y B son equiparables en tamaño
![Page 16: Lab 03 - Cache](https://reader035.vdocuments.site/reader035/viewer/2022081719/5571fb73497959916994e9a8/html5/thumbnails/16.jpg)
16
c) Supuesto que los datos de las matrices estuviesen distribuidos
aleatoriamente en la memoria, ¿qué configuración de caché es la más
conveniente?
d) ¿Qué estructura de datos vista en java nos aproximaría mas a la anterior
situación?, ¿Porqué?
11. Calcular X=Y+Z.
a) Con la misma configuración de caché inicialmente usada, ¿cuál es el
porcentaje de fallo?, ¿Cuál es el principal tipo de fallo que ocurre?
b) Realizando un solo cambio en la configuración, lograr la mayor mejora
posible en la tasa de aciertos. Indicar la misma.
c) Usando la configuración obtenida en el ítem b realice un cambio adicional
para lograr la mayor mejora posible en la tasa de aciertos. Indicar la
misma.
d) Usando la configuración resultado del item b) sin cambiar NINGUN
parámetro de los mostrados en la tabla 2, mejorar la performance de la
caché.
12. Elabore conclusiones sobre todo lo experimentado y realice cualquier crítica de
interes que vea conveniente para el mejor entendimiento de los temas abordados y
su posible solución a implementar.