lunes, 31 de diciembre de 2012

Práctica 4: Jerarquías de Memoria - Cuestionario


Desarrollo de la práctica


Esta práctica es una extensión de la práctica anterior que se compone por cuestiones de tipo de test para poder evaluar el nuevo conocimiento adquirido en las jerarquías de memoria.

Concretamente, se comprende de 20 cuestiones tipo test, de las cuales vamos a destacar 8 preguntas comentando brevemente su respuesta:


P4.­ (Ejem4.cfg y crafty_a.trd) ¿Qué ventajas aporta que la memoria caché de nivel 1 esté dividida en dos?
       a. No aporta ventaja, sólo permite ordenar mejor las páginas.
       b. Aumenta el tamaño de la caché de nivel 1.
       c. Aprovecha mejor el principio de localidad.

Dividida en dos partes dedicadas, una para instrucciones y otra para datos, mantiene en memoria aquellos que fueron solicitados más recientemente (localidad temporal). Por otra parte, al leer un dato o instrucción, leerá los ubicados en un bloque contiguo a ellos (localidad espacial).


P8.­ (Ejem11.cfg y crafty_a.trd) ¿Cuál es el tamaño del conjunto de una memoria asociativa por conjuntos de 2 vías?
        a. 1 bloque
        b. 2 bloques
        c. 4 bloques

Como bien sabemos, la memoria caché asociativa por conjuntos divide la caché en conjunto de bloques. Este conjunto de bloque son las vías posibles para albergar al dato o instrucción proveniente de memoria principal. En nuestro caso el tamaño son 2 bloques.


P13.­ (Ejem4.cfg y crafty_a.trd) ¿Por qué no es necesaria una política de sustitución utilizando mapeado directo?
       a. Porque nunca se reemplaza una página.
       b. Porque la página a reemplazar ya está determinada.
       c. Porque la página a reemplazar siempre se elige al azar.

Dado que cada dato o instrucción en memoria principal ya tiene su bloque asignado mediante los bits de índice y de etiqueta, no necesitamos una política de sustitución para reemplazar las direcciones de memoria.


P14.­ (Ejem4.cfg y crafty_a.trd) ¿Qué ocurre cuando la posición de la memoria caché a la que debemos copiar la nueva página procedente de memoria principal no está vacía sabiendo que estamos utilizando una estrategia de mapeado directo?
       a. La página de esa posición de memoria caché se sobrescribe con la nueva.
       b. Se busca una nueva posición que esté libre.
       c. La nueva página no se escribe en la memoria caché

Como hemos dicho antes, mediante mapeado directo la página a reemplazar ya está determinada por lo tanto, si está ocupada, el dato o instrucción se sobrescribirá con el nuevo.


P15­. (Ejem5.cfg y crafty_a.trd) ¿Por qué no es necesaria la parte de índice en la dirección del bloque utilizando una estrategia de colocación completamente asociativa?
       a. Porque la posición dentro de memoria caché no está definida, el bloque puede colocarse en cualquier posición.
       b. Porque el identificador determina la posición dentro de memoria caché.
       c. Porque la memoria caché nunca se llena.

Como los datos e instrucciones se ubicarán en cualquier bloque de la caché no necesitaremos identificadores  que indiquen correspondencia entre unos u otros bloques de la memoria principal y de la caché.


P16.­ (Ejem11.cfg y crafty_a.trd) ¿Para qué se utiliza la parte de índice en la dirección del bloque utilizando una estrategia de colocación asociativa por conjuntos?
       a. Para obtener el conjunto donde colocar el bloque.
       b. Para obtener la posición donde colocar el bloque.
       c. Para obtener la posición del conjunto donde colocar el bloque.

Para una política asociativa por conjuntos se deben buscar todas las etiquetas del conjunto en el que puede estar el bloque.


P18.­ (Ejem4.cfg y crafty_a.trd) Cuando se utiliza escritura retardada (write­ back):
       a. La información se escribe en la caché y en la memoria principal.
       b. La información se escribe sólo en la caché.
       c. La información se escribe en la caché, en la memoria principal y en la memoria secundaria.

A diferencia de la escritura directa (write through) que siempre escriben en la memoria principal, la escritura retardada escribe sólo en la caché y lo hará en memoria principal cuando se llene la caché.


P19.­ (Ejem4.cfg y crafty_a.trd) ¿Para qué se utiliza el bit de modificación de la memoria caché?
       a. Indica si el bloque se ha modificado mientras se encontraba cargado en ese nivel de caché.
       b. Indica si el bloque se ha modificado mientras se encontraba cargado en cualquier nivel de caché.
       c. Indica que el bloque correspondiente a ese bloque en memoria principal se ha modificado.

El bit de modificación indica si sobre un bloque de la caché se ha escrito o no.


José Ezequiel Gallardo Marín

sábado, 29 de diciembre de 2012

Práctica 3: Jerarquías de Memoria


Desarrollo de la práctica


Para esta práctica se hace imprescindible el uso del software educativo SIJEM, un simulador de jerarquías de memorias de la Universidad de La Laguna de Tenerife. Mediante el simulador podremos visualizar la actividad de la memoria virtual en el tratamiento de la traducción de direcciones lógicas a direcciones reales, estrategias de reemplazo y búsqueda; y visualizar cómo las políticas de ubicación hacen uso de los niveles de memoria, tales como la memoria secundaria, memoria principal y memoria caché y sus niveles.

En nuestra primera toma de contacto simulamos un sistema de jerarquías de memoria con un sólo nivel de caché y una organización tipo mapeado directo. Por tanto las direcciones que la CPU va solicitando se almacenan en este nivel de caché. Si la CPU solicita una dirección que no se encuentra en la caché  L1, se dice que se ha producido un fallo y dicha dirección virtual debe ser  traducida a dirección  real para que  la memoria principal  pueda acceder a la ubicación real del dato o instrucción requerido y copiarlo al nivel 1 de la caché.

Cuando se produce un fallo en la caché y la memoria principal copia la dirección a la caché puede ser que esta se encuentre llena y por tanto tendrá que aplicarse una política de sustitución para ubicar la nueva dirección suministrada por la memoria principal.

En los ejercicios posteriores se implementan los niveles 2 y 3 respectivamente de la caché. Cuando se implementa un nuevo nivel de caché, la probabilidad de acierto, es decir, de que la dirección solicitada por la CPU se encuentre en algunos de los niveles, es mayor que cuando sólo teníamos un único nivel, por tanto también reducimos el uso de la memoria principal.

El proceso es como sigue, por ejemplo, si implementamos en SIJEM una memoria caché de 3 niveles, cuando iniciamos la simulación, la CPU solicita una dirección, busca en el nivel 1, posteriormente en el nivel 2 y por último en el nivel 3. Como inicialmente los niveles se hallan vacíos, continúa hacia el siguiente paso en la jerarquía: la memoria principal.

Para ilustrar de forma cuantitativa el número de aciertos implementando distintos niveles de caché, tomamos los datos de la práctica: el tamaño de la caché L1 es 214  byte,  el tamaño de la caché L2 es 215  byte y el tamaño del bloque de la caché es 212  byte.


El número de bloques de la caché donde se almacenarán las direcciones las obtenemos dividiendo el tamaño de la caché  entre el tamaño del bloque. Así tendremos 4 bloques en el nivel 1 y 8 bloques en el nivel 2.

Seleccionando el fichero de direcciones “crafty_d.trd”, simulamos implementando sólo el nivel 1 de caché:

Número de ciclos CPU:
Aciertos L1: 41
Aciertos memoria principal: 49

Añadimos un segundo nivel de caché

Número de ciclos CPU:
Aciertos L1: 41
Aciertos L2: 33
Aciertos memoria principal: 16

Rápidamente observamos la eficiencia al implementar un segundo nivel a la caché. Los aciertos se incrementaron casi en un 50% y el uso de la memoria principal bajó un 67%.

Sin embargo, podemos mejorar la estadística de aciertos todavía más si empleamos una buena política de organización de bloques. Hasta ahora hemos empleado organización de tipo mapeado directo en el que cada dirección de memoria se corresponde con una sola entrada de la caché. Aunque esta política es la más económica y su acceso es rápido veremos que es la que causa más desaciertos.

En la siguiente simulación usaremos organización de tipo asociativa y asociativa por conjuntos. La organización asociativa usa una política de ubicación en la que cualquier bloque de memoria puede ubicarse en cualquier bloque del caché.
Este método, aunque es el que mejor rinde, también es el más caro dado que usa un comparador por cada bloque. Encontraremos el equilibrio pues en la organización asociativa por conjuntos. Intermedio al método directo y completamente asociativo, su política dicta que cada bloque de memoria puede ser ubicado en uno de los N bloques de la caché (conjuntos de N bloques).
Esta organización en cuanto a rendimiento-coste es la mejor opción ya que al dividir la memoria caché en conjuntos fijos de bloques ahorrará en comparadores.

Llevando a la práctica nuestra breve fundamentación y con los mismos datos de antes, simulamos y comparamos con la organización de mapeado directo usada al principio.


Para la organización “completamente asociativa” se obtuvieron lo siguientes resultados
Aciertos caché L1: 47
Aciertos caché L2: 35
Aciertos caché : 82
Aciertos memoria principal: 8

Para la organización “asociativa por conjuntos de 2 vías” se obtuvieron lo siguientes resultados
Aciertos caché L1: 43
Aciertos caché L2: 37
Aciertos caché : 80
Aciertos memoria principal: 10


Cuando usabamos mapeado directo los aciertos en caché fueron 74. Con la política completamente asociativa se obtuvo un 10% más de aciertos y con la asociativa por conjuntos de 2 vías los aciertos se incrementaron un 7,5%.

Como último apartado trataremos qué bloque sustituir cuando se produce un fallo o desacierto en la memoria caché. Hasta ahora, cada vez que la memoria caché fallaba, copiabamos el bloque de memoria principal sobre cualquier bloque de la memoria caché, es decir, mediante reemplazo aleatorio, sin embargo existen otras políticas de sustitución con buena tasa de aciertos: FIFO, LRU y LFU.

Las políticas de reemplazo FIFO (First In First Out) y aleatoria contemplan buena tasa de aciertos y son económicas de implementar.
Las políticas LRU (Least Recently Used) y LFU (Least Frecuency Used) contemplan también buena tasa de aciertos aunque son complejas de implementas (mediante contadores), y puede fallar con matrices.

En la simulación usamos el fichero de ejemplo ejem5.cfg y ejem8.cfg con las siguientes especificaciones:

Fichero: Ejem5.cfg
Configuración de la memoria principal:
Tamaño: 1024 KByte
Tamaño página: 4 KByte
Tamaño acceso: 1000 Ciclos
Tipo de organización: Completamente Asociativa
Tipo de sustitucion: Azar

Y comparamos con los fichero de direcciones: crafty_a.trd, facerec_a.trd, gcc_a.trd

Archivo de traza: crafty_a.trd Archivo de traza: facerec_a.trd Archivo de traza: gcc_a.trd
Aciertos L1: 12
Aciertos L2: 5
Aciertos L3: 4
Aciertos Totales: 21
Aciertos memeria principal: 15
Fallos: 64
Aciertos L1: 51
Aciertos L2: 6
Aciertos L3: 4
Aciertos Totales: 61
Aciertos memeria principal: 1
Fallos: 37
Aciertos L1: 54
Aciertos L2: 5
Aciertos L3: 4
Aciertos Totales: 63
Aciertos memeria principal: 2
Fallos: 35


Fichero: Ejem8.cfg
Configuración de la memoria principal:
Tamaño: 1024 KByte
Tamaño página: 4 KByte
Tamaño acceso: 1000 Ciclos
Tipo de organización: Completamente Asociativa
Tipo de sustitucion: LFU



Comparamos con los fichero de direcciones usados antes: crafty_a.trd, facerec_a.trd, gcc_a.trd

Archivo de traza: crafty_a.trdArchivo de traza: facerec_a.trdArchivo de traza: gcc_a.trd
Aciertos L1: 5
Aciertos L2: 3
Aciertos L3: 1
Aciertos Totales: 9
Aciertos memeria principal: 27
Fallos: 64
Aciertos L1: 49
Aciertos L2: 3
Aciertos L3: 7
Aciertos Totales: 59
Aciertos memeria principal: 3
Fallos: 37
Aciertos L1: 53
Aciertos L2: 1
Aciertos L3: 8
Aciertos Totales: 62
Aciertos memeria principal: 3
Fallos: 35

Comparando ambas tablas nos damos cuenta de que obtienen los mismo fallos, sin embargo, el uso de la memoria principal es menor usando reemplazo aleatorio. La tasa de aciertos también es más alta con reemplazamiento aleatorio para nuestra simulación.


Valoración y autocrítica de la práctica.

Con respecto al enunciado de la práctica se pueden mejorar algunos aspectos. La práctica podría dividirse en tres fases: implementando una jerarquia de memoria, políticas de emplazamiento de bloques y políticas de sustitución de bloques.

De este modo, intercambiaría los ejercicios 4 y 5 para que primeramente en los ejercicios 2,3 y 4 se implementaran las caché desde el nivel 1 al 3. Y así, en el ejercicio 5, se pediría implementar una caché de tres niveles con múltiples organizaciones de emplazamiento.

Llegando pues al ejercicio 6, bien situado, donde para unas especificaciones se contrastan los resultados cambiando las políticas de sustitución en cada caso.

José Ezequiel Gallardo Marín

lunes, 10 de diciembre de 2012

Planificación

Hola a todos.

Os dejo a continuación la lista de miembros y la planificación que he preparado para la realización de la memoria de prácticas de nuestro grupo.

Miembros del grupo

  • Pablo Pastor Muñoz
  • Alberto García González (Coordinador)
  • José Ezequiel Gallardo Marín
  • David Pérez Gil
  • José Enrique Lechuga Torres
  • Raúl Gutiérrez Rosado
  • Antonio Gil Escudier

Reparto de tareas

  • Práctica 1, planificación y revisión general: Alberto García González
  • Práctica 2 y revisión de prácticas 3 y 4: David Pérez Gil
  • Prácticas 3 y 4 y revisión de práctica 5: José Ezequiel Gallardo Marín
  • Práctica 5 y revisión de práctica 6: Antonio Gil Escudier
  • Práctica 6 y revisión de práctica 7: Pablo Pastor Muñoz
  • Práctica 7 y revisión de práctica 8: José Enrique Lechuga Torres
  • Práctica 8 y revisión de prácticas 1 y 2: Raúl Gutiérrez Rosado

Procedimiento

  • Cada miembro escogerá una de las tareas listadas anteriormente, que corresponden a la realización de la memoria de una o varias prácticas y la corrección de otras. Las tareas que no estén asignadas antes del Viernes 14 se repartirán al azar.
  • Cada memoria se realizará en una entrada en el blog que podrá ser actualizada para ir añadiendo el contenido o las correcciones que sean necesarias.
  • Leer las indicaciones y criterios de evaluación de las memorias: http://db.tt/yaYmzKgQ .
  • Las revisiones se tratan de leer la práctica de otro y comentar si falta algo, si hay algún error, etc. La persona cuyo trabajo sea revisado deberá considerar lo que se le haya comentado y cambiar su memoria si fuera necesario.

Fechas importantes

  • Viernes 14 de Diciembre: Asignación de las tareas que no hayan sido escogidas.
  • Viernes 4 de Enero: Fecha límite para la publicación de las memorias de las prácticas 1 a la 7.
  • Viernes 11 de Enero: Fecha límite para las correciones de las prácticas 1 a la 7 (tanto comentarios como modificaciones).
  • Sábado 12 de Enero: Fecha límite para la publicación de la memoria de la práctica 8.
  • Lunes 14 de Enero: Fecha límite para las correciones de la práctica 8 (tanto comentarios como modificaciones).
  • Martes 15 de Enero: Presentación de la memoria de prácticas.

Si tenéis cualquier duda, comentario o sugerencia al respecto, no os cortéis, toda buena idea será bienvenida y si además hace más cómodo el trabajo, mejor :-).

¡A trabajar!