lab 03 - cache

16
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 III 1 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.

Upload: eliseo-viola

Post on 05-Jul-2015

435 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Lab 03 - Cache

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.