18
1 Sesiones 7 y 8- Práctica de Memoria Cache: Introducción al simulador MipsIt Studio 2000 Arquitectura de Computadores (IS19) Área de Arquitectura y Tecnología de Computadores Departamento de Ingeniería y Ciencia de los Computadores Curso 2009-2010 1. Objetivos El objetivo de estas sesiones es profundizar en el estudio de la memoria cache. Para ello, en primer lugar debe familiarizarse con la herramienta a emplear en estas sesiones. En concreto, se presenta una aplicación desarrollada para la evaluación de sistemas jerárquicos multicache: MipsIt [1]. Esta herramienta permite ver cuál es el mejor diseño para una máquina determinada, considerando todos los aspectos del diseño de un sistema de memoria. En segundo lugar, una vez familiarizado con la herramienta a emplear, se analizará el comportamiento de la memoria cache desde diferentes puntos de vista: - Observando la influencia de los distintos parámetros de diseño: Tamaño total, tamaño de bloque, políticas de emplazamiento, escritura, etc. - Comprobando cómo pequeños cambios en el código de los programas pueden influir en las prestaciones obtenidas.

Sesiones 7 y 8- Práctica de Memoria Cache: Introducción al ...mermaja.act.uji.es/docencia/is19/data/sesion7-8-2009.pdf · Introducción al simulador MipsIt Studio 2000 Arquitectura

Embed Size (px)

Citation preview

1

Sesiones 7 y 8- Práctica de Memoria Cache: Introducción al simulador MipsIt Studio 2000

Arquitectura de Computadores (IS19)

Área de Arquitectura y Tecnología de Computadores Departamento de Ingeniería y Ciencia de los Computadores

Curso 2009-2010

1. Objetivos El objetivo de estas sesiones es profundizar en el estudio de la memoria cache. Para ello, en primer lugar debe familiarizarse con la herramienta a emplear en estas sesiones. En concreto, se presenta una aplicación desarrollada para la evaluación de sistemas jerárquicos multicache: MipsIt [1]. Esta herramienta permite ver cuál es el mejor diseño para una máquina determinada, considerando todos los aspectos del diseño de un sistema de memoria. En segundo lugar, una vez familiarizado con la herramienta a emplear, se analizará el comportamiento de la memoria cache desde diferentes puntos de vista:

- Observando la influencia de los distintos parámetros de diseño: Tamaño total, tamaño de bloque, políticas de emplazamiento, escritura, etc. - Comprobando cómo pequeños cambios en el código de los programas pueden influir en las prestaciones obtenidas.

2

2. Material a emplear Para el desarrollo de estas sesiones de laboratorio se dispondrá de un computador personal PC, con el sistema operativo Windows, y el simulador de memoria cache mencionado anteriormente, el MipsIt. A continuación se pasa a describir las características de esta herramienta.

3. Manual de uso del simulador MipsIt 3.1- Descarga e instalación del programa Desde la web oficial de MipsIt (http://www.bostream.nu/mats.brorsson/mipsit/) se puede descargar el simulador MIPS para el sistema operativo Windows. El fichero se debe descomprimir en cualquier directorio que no contenga espacios en blanco en su nombre. En dicho directorio aparecerán las siguientes carpetas y ficheros:

El directorio bin es el que contiene los programas ejecutables. En estas sesiones de prácticas se van a utilizar dos de ellos:

- MipsIt.exe: MipsIt Studio 2000 (entorno de programación para MIPS). - Mips.exe: MipsSim (simulador de MIPS).

3.2- MipsIt Studio 2000 (MipsIt.exe) Introducción Es el entorno de programación en el que se van a escribir los programas de las sesiones de prácticas. El concepto fundamental en MipsIt Studio 2000 es el de proyecto, que se puede entender como un conjunto de ficheros fuente interrelacionados que se compilan y ensamblan para generar un fichero ejecutable que será llevado al simulador de MIPS. Un proyecto puede contener programas escritos en ensamblador MIPS, programas escritos en lenguaje C y ficheros de texto.

3

El siguiente esquema muestra el aspecto de este programa:

En dicho esquema se pueden observar las siguientes ventanas:

- Ventana de programas: Muestra el contenido de los ficheros - Ventana del espacio de trabajo: Contiene una lista de todos los ficheros incluidos en el

proyecto. - Ventana de salida: Proporciona información durante las fases de compilación y

ensamblado. Configuración En el menú File, submenú Options, se puede configurar MipsIt Studio 2000, en concreto se puede especificar los directorios en los que se encuentran los ficheros ejecutables (bin), los ficheros de librería (lib) y los de cabecera (include) de la aplicación. También se puede indicar la localización del compilador (bin/xgcc.exe).

4

Creación de un proyecto Los pasos a seguir para la creación de un proyecto son los siguientes:

1- Seleccionar el menú File -> New. Pinchar en Project si no está seleccionada por defecto. 2- Elegir el tipo de proyecto que se va a crear. Existen tres posibilidades:

- Assembler: El proyecto sólo contiene ficheros en ensamblador - C/Assembler: Habrá sólo ficheros en lenguaje C o ficheros en C y en ensamblador. Los programas con esta opción no pueden ser simulados con MipsSim.

- C(minimal)/Assembler : Igual que en el caso anterior, pero se hace uso sólo de los ficheros básicos de librerías imprescindibles. Los programas con esta opción sí que pueden ser simulados con MipsSim.

3- Se introduce el nombre del proyecto en Project Name y se especifica su ubicación en Location.

4- Por último se pulsa en Aceptar en la ventana que aparece a continuación:

Añadir ficheros nuevos a un proyecto Con los pasos anteriores se tiene un proyecto vacío, sin ningún fichero. Para crear ficheros se siguen los mismos pasos que antes pero, en el paso 1, se elige la opción File.

5

Añadir ficheros existentes a un proyecto En este caso, dentro del menú Project se escoge la opción Add file. Aparece un cuadro de diálogo en el que se elegirá fichero que se quiere añadir al proyecto. Compilación y ensamblado Si se elige el menú Build->Build, se compilarán todos los ficheros en lenguaje C y se ensamblará y linkarán todos los ficheros del proyecto. En la ventana de salida aparecerán mensajes de información sobre cómo ha ido el proceso, si existen errores, etc. Si se quiere recompilar todo el proyecto se debe elegir la opción Rebuild All del menú Build. Ensamblador generado para los ficheros en lenguaje C Si se tienen programas escritos en lenguaje C, se puede ver cuál es el programa equivalente en ensamblador generado por MipsIt. Para ello, una vez se compila el programa, se abre el fichero escrito en C y se selecciona el menú Build->View Assembler. 3.3- MipsSim: Simulador de MIPS (Mips.exe) Introducción Si no se dispone de una placa con el procesador MIPS, se necesita un simulador de MIPS para comprobar el funcionamiento de los programas escritos. Se trata de un entorno gráfico que permite ver en todo momento el estado de la memoria, los registros de la CPU, la consola de salida, etc. a medida que se vaya ejecutando dicho programa. Al hacer doble-clic sobre el icono del fichero Mips.exe aparecerá la siguiente ventana:

6

Descripción de los módulos simulados Como se puede observar en el esquema anterior aparecen los siguientes módulos:

- CPU - Memoria RAM - Consola - I/O - D-Cache e I-Cache - Interrupt

Se puede abrir cada uno de estos módulos con hacer clic sobre ellos. A continuación se describen con más detalles aquellos que se van a emplear en estas sesiones de prácticas.

CPU Permite ver y modificar el contenido de los registros de la CPU, incluyendo el contador de programa (PC), los registros de multiplicación y división, HI y LO, que reciben los nombres de mdhi y mdlo respectivamente, así como los registros del coprocesador 0 (BADVA, status, cause y EPC). Su apariencia gráfica es la siguiente:

Memoria RAM

Al pulsar sobre RAM aparece una ventana con el contenido de la memoria por filas. Cada una de las filas lleva especificada una dirección (Address), al lado de la cual aparece el contenido de la misma (Content). Ambos valores aparecen en hexadecimal. Si existe una etiqueta que identifica dicha instrucción aparecerá en la columna etiquetada como Label. En la última columna aparece el equivalente en lenguaje ensamblador de dicha instrucción. Las instrucciones en ensamblador que aparecen en la memoria no tienen por qué coincidir exactamente con las que se han introducido en MipsIt Studio 2000, debido a la utilización de pseudoinstrucciones o si el ensamblador reordena las instrucciones a efectos de optimización. Las posiciones de memoria que no tienen datos asignados muestran su contenido mediante interrogantes.

7

El siguiente esquema muestra la estructura de la memoria RAM:

Puesto que la memoria del MIPS abarca 4GB, moverse a lo largo de la memoria usando las flechas de la ventana o la barra espaciadota resulta engorroso, es mejor utilizar el menú contextual que aparece haciendo clic con el botón derecho del ratón.

8

El contenido de dicho menú está dividido en cuatro secciones: - La primera permite seleccionar entre mostrar las direcciones de memoria virtuales o físicas. - La segunda permite elegir el modo de traducción del contenido de memoria de cada instrucción. Por defecto, se emplea la opción de Assembler que presenta el contenido de memoria en lenguaje ensamblador. También se puede elegir en interpretar los números como si fuesen enteros, enteros sin signo, en coma flotante o en ASCII. - La tercera sección permite moverse fácilmente a lo largo de la memoria: Sus opciones son las siguientes: - Track PC: Mantiene la instrucción apuntada por el contador de programa (PC) en el centro de la ventana.

- Jump to PC: Salta a la posición de memoria apuntada por PC - Jump to SP: Salta a la posición de memoria indicada por el puntero de pila. - Jump to Symbol: Salta a la posición de memoria indicada por una etiqueta.

- La cuarta sección permite modificar el valor del contador de programa al especificar cuál va a ser la próxima instrucción que se va a ejecutar (Set Next Statement) y permite establecer un punto de ruptura para tareas de depuración del programa (Set Breakpoint). También se pueden establecer puntos de ruptura directamente haciendo doble clic sobre la instrucción que interese. El punto de ruptura se identifica mediante un círculo a la izquierda de la instrucción.

9

Memoria Cache El siguiente esquema presenta el contenido de la memoria cache de datos (D-Cache). Es el mismo para la cache de instrucciones (I-Cache).

Este esquema contiene cuatro partes:

- Dirección actual (Address): Está dividida en los campos etiqueta, línea o conjunto y palabra. Dependiendo de la configuración de la cache su estructura cambia. En el esquema anterior: - Etiqueta: Bits del 6 al 31. - Línea: Bits del 3 al 5. - Palabra: Se corresponde con los dos últimos campos (bits del 0 al 2). Puesto que en la cache se almacenan palabras de 4 bytes y el procesador direcciona a nivel de byte, los dos bits menos significativos (0 y 1) identifican un byte dentro de la palabra, pero son irrelevantes para el acceso a la cache. El resto de bits del campo palabra hacen referencia a las palabras de 4 bytes que componen cada línea. En este caso, el bit 2 identifica las dos palabras de 4 bytes que componen cada línea.

10

- La propia cache: La línea seleccionada (en base al campo línea o conjunto) aparece en color grisáceo. La palabra seleccionada mediante el campo palabra aparece en color azul. La columna V indica si esa línea es válida o no. Para una cache con la escritura write back aparece una columna de dirty (C).

- Búfer de escritura (Write Buffer): Aparece en el caso de que el tamaño del mismo sea distinto de cero.

- Estadísticas de la cache: Aparece el número de aciertos de cache (Hit count), el número de fallos de cache (miss count) y el porcentaje de aciertos (hit rate).

Para configurar la cache se debe elegir la opción Edit->Cache/Mem Config, apareciendo la siguiente ventana:

En ella se puede elegir la configuración de la cache de datos y de la de instrucciones. En la cache de

datos aparecen las opciones siguientes: - Size: Tamaño de la cache en palabras de 4 bytes. - Block Size: Número de palabras de 4 bytes que componen cada línea. - Block in sets: Grado de asociatividad (número de vías de cada conjunto). - Replacement policy: Se escoge entre tres posibles técnicas de reemplazamiento (aleatorio,

FIFO o LRU). - Write policy: Se escoge entre dos posibles técnicas de escritura (write back o write

through). Se puede desactivar una cache activando el botón de Disable. También se puede desactivar la penalización que supone un fallo en cache mediante la activación del botón de Disable penalty. La configuración de la cache de instrucciones es la misma salvo que no aparece la opción de Write

policy.

11

La configuración de la memoria es la que aparece en la siguiente figura:

En ellas se especifican los ciclos que penalizan los fallos de cache en las operaciones de lectura y escritura, así como el tamaño del búfer de escritura (write buffer size). También se pueden visualizar las estadísticas de la memoria cache con la opción View->I Cache

Stats o D Cache Stats (para la cache de instrucciones y de datos respectivamente). A continuación se presentan algunas configuraciones de la cache a modo de ejemplo:

Ejemplo 1: El siguiente esquema:

12

representa una memoria cache de datos de:

- Tamaño total: 32 (size=32) palabras de 4 bytes, en total 128 bytes. - Tamaño de línea: 2 palabras de 4 bytes en cada línea (block size = 2), en total 8 bytes. - Función de correspondencia: Mapeado Directo (block in sets = 1).

En base a la configuración de la memoria cache, la dirección de memoria principal consta de los campos:

- Etiqueta: bits del 7 al 31. - Línea: bits del 3 al 6 (16 líneas). - Palabra: 2 palabras (bit 2) de 4 bytes cada una (bits 0 y 1). Direccionable a nivel de byte.

Ejemplo 2: El siguiente esquema:

13

representa una memoria cache de datos de: - Tamaño total: 8 (size=8) palabras de 4 bytes, en total 32 bytes. - Tamaño de línea: 2 palabras de 4 bytes en cada línea (block size = 2), en total 8 bytes. - Función de correspondencia: 2-asociativa (block in sets = 2).

En base a la configuración de la memoria cache, la dirección de memoria principal consta de los campos:

- Etiqueta: bits del 4 al 31. - Conjunto: bit 3 (2 conjuntos). - Palabra: 2 palabras (bit 2) de 4 bytes cada una (bits 0 y 1). Direccionable a nivel de byte.

Carga de un programa en ensamblador en el simulador Si se tienen abiertos a la vez los programas MipsIt Studio 2000 y MipsSim se compila un programa, y si no hay errores se puede transferir el programa en ensamblador del MipsIt Studio 2000 al simulador, sin más que escoger la opción del menú Build->Upload->To Simulator. Si el simulador no está abierto, al realizar esta operación aparecerá una ventana de error con el mensaje “Failed to

upload to simulator”. Otra forma de realizar esta operación consiste en, desde el simulador, seleccionar el menú File-

>Open. Se selecciona el fichero con extensión .srec o .out que MipsIt Studio 2000 habrá creado en la fase de compilación y ensamblado del proyecto. Simulación de programas Si el programa ya está cargado en la memoria RAM se puede simular su funcionamiento. Existen tres botones que permiten controlar la ejecución:

Run: Permite que el programa se simule de principio a fin (o hasta el primer punto de ruptura). En el caso de haberse detenido el programa con el botón de pausa (stop) o mediante un punto de ruptura permite reanudar la ejecución.

Stop: Permite hacer una pausa en la ejecución.

Step: Permite ejecutar las instrucciones en código máquina una a una.

4. Ejercicio de empleo de las herramientas presentadas El siguiente ejercicio permite familiarizarse con el empleo de las herramientas presentadas. En primer lugar se creará un nuevo proyecto del tipo C(minimal)/Assembler (denominado fichC). Se crea un nuevo fichero en lenguaje C (denominado ej1.c), cuyo código será el siguiente:

#define N 16

int main()

{

register int i;

int A[N],B[N];

for(i=0;i<N;i++)

B[i] = A[i] + i;

}

Se compila dicho programa y si no existen errores se escoge la opción View Assembler. La idea es copiar este fichero en lenguaje ensamblador del MIPS R2000 en un nuevo proyecto. Por tanto, se

14

creará un nuevo proyecto del tipo Assembler (denominado ejercicio1). Se crea un nuevo fichero en lenguaje ensamblador (denominado ej1.s). El código de este fichero será: .file 1 "ej1.c"

# -G value = 8, Cpu = 3000, ISA = 1

# GNU C version cygnus-2.7.2-970404 (mips-mips-ecoff) compiled by GNU C

version cygnus-2.7.2-970404.

# options passed: -msoft-float

# options enabled: -fpeephole -ffunction-cse -fkeep-static-consts

# -fpcc-struct-return -fcommon -fverbose-asm -fgnu-linker -msoft-float

# -meb -mcpu=3000

gcc2_compiled.:

__gnu_compiled_c:

.text

.align 2

.globl main

.ent main

main:

.frame $fp,152,$31 # vars= 128, regs= 2/0, args= 16, extra= 0

.mask 0xc0000000,-4

.fmask 0x00000000,0

subu $sp,$sp,152

sw $31,148($sp)

sw $fp,144($sp)

move $fp,$sp

jal __main

move $2,$0

$L2:

slt $3,$2,16

bne $3,$0,$L5

j $L3

$L5:

move $3,$2

sll $4,$3,2

addu $3,$fp,16

addu $4,$4,$3

addu $3,$4,64

move $4,$2

sll $5,$4,2

addu $6,$fp,16

addu $4,$5,$6

lw $5,0($4)

addu $4,$5,$2

sw $4,0($3)

$L4:

addu $2,$2,1

j $L2

$L3:

$L1:

move $sp,$fp # sp not trusted here

lw $31,148($sp)

lw $fp,144($sp)

addu $sp,$sp,152

j $31

.end main

15

En el código se puede observar que aparecen una serie de instrucciones de lectura y escritura en memoria (lw y sw) que están relacionadas con el bloque de activación. Estas instrucciones aparecen en negrita. Para lo que interesa en el desarrollo de la sesión de prácticas se pueden eliminar dichas instrucciones. De esta forma se observa que las únicas instrucciones de acceso a memoria son las que aparecen en cursiva, dentro del bucle etiquetado como $L5 (se corresponden con los accesos a los vectores A y B). Si se compila dicho programa (opción Build), aparecerá el error Cannot find

entry simbol Start. Se resuelve dicho problema sin más que sustituir las referencias a main por start. De esta forma el código definitivo es el siguiente (en cursiva y negrita las instrucciones de acceso a los vectores A y B): .file 1 "ej1.c"

# -G value = 8, Cpu = 3000, ISA = 1

# GNU C version cygnus-2.7.2-970404 (mips-mips-ecoff) compiled by GNU C

version cygnus-2.7.2-970404.

# options passed: -msoft-float

# options enabled: -fpeephole -ffunction-cse -fkeep-static-consts

# -fpcc-struct-return -fcommon -fverbose-asm -fgnu-linker -msoft-float

# -meb -mcpu=3000

gcc2_compiled.:

__gnu_compiled_c:

.text

.align 2

.globl start

.ent start

start:

move $2,$0

$L2:

slt $3,$2,16

bne $3,$0,$L5

j $L3

$L5:

move $3,$2

sll $4,$3,2

addu $3,$fp,16

addu $4,$4,$3

addu $3,$4,64

move $4,$2

sll $5,$4,2

addu $6,$fp,16

addu $4,$5,$6

lw $5,0($4)

addu $4,$5,$2

sw $4,0($3)

$L4:

addu $2,$2,1

j $L2

$L3:

$L1:

j $31

.end start

16

A continuación se abre el programa Mips.exe. De vuelta a MipSit se escoge la opción Upload to

simulator para cargar el programa eje1.out en el simulador Mips.exe. Dentro de Mips.exe ejecutar el programa. - Cuestión 4.1: Una vez ejecutado el programa, ¿cuántos accesos a memoria se han producido? Justifica la respuesta. Indica las direcciones de memoria a partir de las cuales están almacenados los vectores A y B. - Cuestión 4.2: A continuación se configurará la memoria caché de datos para las siguientes situaciones:

- Mapeado directo (Size=8, Block size=2, blocks in sets=1). - 2-asociativa (Size=8, Block size=2, blocks in sets=2). Técnica de Reemplazamiento: LRU.

Ejecuta el programa e indica el número de fallos y aciertos que se producen en los accesos a memoria para cada una de las configuraciones de cache. Explica detalladamente el patrón de acceso a los datos para cada una de las configuraciones de cache. Compara los resultados obtenidos en ambas configuraciones y justifícalos.

- Cuestión 4.3: Si se aumentase la asociatividad de la memoria cache, manteniendo el mismo tamaño de vectores, el mismo tamaño de cache (size) y de bloques (block size) ¿se conseguiría alguna mejora en las prestaciones respecto a las obtenidas en la cuestión 4.2? Justifica la respuesta. - Cuestión 4.4: Se realizan las siguientes configuraciones de memoria cache:

- Mapeado directo (Size=8, Block size=4, blocks in sets=1). - 2-asociativa (Size=8, Block size=4, blocks in sets=2). Técnica de Reemplazamiento: LRU.

¿Se obtiene alguna mejora en las prestaciones respecto a las obtenidas en la cuestión 4.2? Justifica la respuesta. - Cuestión 4.5: Especifica algún tamaño de los vectores (los dos de igual tamaño y N>16) para el que los resultados son los mismos en las siguientes configuraciones de la memoria cache:

- Mapeado directo (Size=8, Block size=2, blocks in sets=1). - 2-asociativa (Size=8, Block size=2, blocks in sets=2). Técnica de Reemplazamiento: LRU.

Justifica la respuesta. En general, ¿qué tamaño deberían tener los vectores para que se obtuvieran las mismas prestaciones con ambas configuraciones? - Cuestión 4.6: Si se emplea la configuración de mapeado directo de la cuestión 4.2, ¿cuál debe ser el tamaño de los vectores (los dos de igual tamaño) para que se produzcan 124 fallos de cache? Justifica la respuesta.

17

5. Ejercicio resumen

Dado el siguiente programa escrito en lenguaje C (prueba1.c):

/* El programa parte de un par matrices 16x16 ya inicializadas a valores

fijos. Se calcula la suma y la resta de las matrices A y B. El resultado queda

en R1 y R2:

R1[i,j] = A[i,j] + B[i,j];

R2[i,j] = A[i,j] - B[i,j]; */

/* Implementación del programa en C */

#define TAM 16

int main()

{

register int i, j, k;

int a[TAM][TAM], b[TAM][TAM];

int r1[TAM][TAM], r2[TAM][TAM];

/* SUMA sobre matriz resultado de las matrices fuente */

for (i=0; j < TAM; i++)

for (j=0; i < TAM; j++)

{

r1[i][j]= a[i][j] + b[i][j];

r2[i][j]= a[i][j] - b[i][j];

}

}

Genera el correspondiente fichero en lenguaje ensamblador (prueba2.s) y se ejecuta en Mips.exe, Configura la memoria cache de acuerdo a una de las tres especificaciones que a continuación se indican y que decidirá el profesor de prácticas:

a) Memoria cache de tamaño 32 palabras (size = 32) y tamaño de línea de 2 palabras (size block = 2).

b) Memoria cache de tamaño 32 palabras (size = 32) y tamaño de línea de 4 palabras (size block = 4).

c) memoria cache de tamaño 64 palabras (size = 64) y tamaño de línea de 4 palabras (size block = 4).

A continuación se deberá responder a las siguientes cuestiones: Cuestión 5.1: Configura la memoria cache con una función de correspondencia mapeado directo. Indica cuántos accesos y fallos de cache se producen durante la ejecución de este código. Justifica los resultados obtenidos detallando el patrón de acceso a los datos.

Cuestión 5.2: Configura la memoria cache con una función de correspondencia 2-asociativa. Indica cuántos accesos y fallos de cache se producen durante la ejecución de este código. Justifica los resultados obtenidos detallando el patrón de acceso a los datos.

Cuestión 5.3: Una vez configurada la memoria cache con una función de correspondencia 4-asociativa se responderá a las siguientes preguntas:

a) Indica cuántos accesos y fallos de cache se producen durante la ejecución de este código. Justifica los resultados obtenidos detallando el patrón de acceso a los datos. b) Si se aumenta el grado de asociatividad de la función de correspondencia, ¿mejorarían las prestaciones? Justifica la respuesta.

18

Cuestión 5.4. ¿Cuál debe ser el valor de TAM (matrices cuadradas) para que se produzca un número determinado de fallos de cache con una función de correspondencia de mapeado directo? Dichos valores son los siguientes:

a) 1800 fallos de cache para una memoria cache de tamaño 32 palabras (size = 32) y tamaño de línea de 2 palabras (size block = 2).

b) 676 fallos de cache para una memoria cache de tamaño 32 palabras (size = 32) y tamaño de línea de 4 palabras (size block = 4).

c) 484 fallos de cache para una memoria cache de tamaño 64 palabras (size = 64) y tamaño de línea de 4 palabras (size block = 4).

Sólo se deberá responder a la pregunta con el número de fallos que se corresponda con la configuración de memoria cache decidida por el profesor de prácticas. Justifica la respuesta obtenida.

6. Evaluación Cada grupo debe elaborar una memoria que contenga la solución a las cuestiones planteadas en los ejercicios 4 y 5. Este documento, en versión pdf, se deberá colgar en el Aula Virtual en una tarea que se habilitará para ello durante la última sesión de prácticas dedicada a memoria cache. El profesor, si lo considera oportuno, podrá llamar a los miembros del grupo para la defensa del trabajo y la posterior calificación. En el Aula Virtual también existe un documento que sirve de plantilla para la realización de la memoria.

7. Referencias [1] MIPS Lab Environment Reference. Georg Fischer. http://www.bostream.nu/mats.brorsson/mipsit/