Translate

viernes, 21 de diciembre de 2012

Práctica 5


Para comenzar a realizar la práctica necesitaríamos el simulador SIMULA3MS y un computador con Java. Con esto podemos iniciar la práctica.

  • 1.- Para aprender a utilizar este nuevo entorno de simulación de MIPS el alumno/a deberá hacer uso del manual adjunto a la práctica. Del manual debe extraerse toda la información necesaria sobre cómo escribir un programa, esto es, declaración de variables, juego de instrucciones y su sintaxis así como toda la información sobre los 32 registros de que dispone este procesador.
  • Este apartado es fácil de realizar simplemente mirando el manual y viendo cómo se maneja el programa. El manual podemos encontrarlo en la misma carpeta en la de la practica 5
  •   

    • 2.-Atendiendo al manual y usando el editor de Simula3MS, escriba el programa de ejemplo que se muestra en la figura 1.


    Con esta captura vemos el programa copiado que indicaban en la práctica.
    • 3.-Guarde el fichero y a continuación pinche sobre el botón ensamblar y compruebe que no se produce ningún error, figura 2


     Si se produjesen errores saldrían en el cuadro de zona de errores.

    • 4.-Si ha habido errores repase la sintaxis de las instrucciones ayudándose del manual. En caso contrario, pique sobre ejecutar para iniciar el proceso de simulación de ejecución del programa recién creado.Observe en la nueva ventana las zonas que se destacan en la figura.


    Así quedaría el programa justo después de darle al botón ejecutar. 


    • 5.-Ejecute paso a paso el programa haciendo uso del botón “Ciclo siguiente”, cada vez que lo pulse se destacará en color azul la instrucción en curso. Observe y anote los cambios que se producen en el contenido de los registros usados, así como de la memoria de datos.
    • Registros
      • $t0:10010000 $s0:00000064            (Valor interno de $t0)
      • $t1:10010004 $s1:fffffff6                (Valor interno de $t1)
      • $t2:10010008 $s2:0000005a            (Resultado de la suma)
    • Memo datos:
      • Dirección 0x10010000:0x00000064
      • Dirección 0x10010004:0xfffffff6
      • Dirección 0x10010008:0x0000005

    • 6.-Escriba el siguiente código usando el editor, ensamble y ejecute para a continuación explicar qué hace este programa. Durante la ejecución observe también como la arquitectura mostrada (Figura 4) va cambiando de color, será de utilidad para la siguiente práctica.



    • Explicación del código:La palabra está dividida en bloques de 4 bytes, y cada byte en este caso tiene un valor, al hacer cada carga de palabra (LW) almacenamos en cada registro el valor de cada byte de dicha palabra.
    • Contenido del segmento de datos de memoria al inicio de la ejecución:
      • 0x10010000: 0x000000d2
      • 0x10010004: 0x000000f0
      • 0x10010008: 0x0000014a
      • 0x1001000c: 0x00001608
    • Contenido del registro t1 antes de la ejecución:
      • t1:00000000
    • Valor del registro PC antes de la ejecución:
      • PC:00400000
    • Contenido del registro t1 después de la ejecución:
      • t1:10010000
    • Contenido de los registros siguientes al término de la ejecución:
      • s0:000000d
      • s1:000000f0
      • s2:0000014a
    • Valor del registro PC al término de la ejecución:
      • PC:00400018

    • 7.-Es posible realizar llamadas al sistema para visualizar por pantalla datos o incluso introducir algunos, apartado A.5. del manual. Para pedir un servicio hay que cargar el código de la llamada deseada en el registro de MIPS denominado $v0 y los argumentos que se van a mostrar o leer en los registros $a0 ó $a1. Una vez establecidos estos valores se procederá a efectuar la llamada con syscall.Escriba el siguiente código usando el editor de Simula3MS, ensamble y ejecute y compruebe el resultado.
    Copiamos el código, lo ensamblamos y lo ejecutamos.



    En el ciclo 5 de su ejecución cuando ha realizado la llamada asociada con imprimir por pantalla, muestra con el syscall (efectúa la llamada) el número en pantalla, luego continúa los ciclos y realiza la llamada que indica al procesador que debe salir del programa. Este sería un breve análisis de lo que realiza este programa.
    • 8.-Construya un nuevo programa que solicite por teclado tres valores enteros y los almacene en memoria en un vector llamado “vector” para el que previamente se habrán reservado cuatro palabras de memoria, tres para los enteros introducidos y un cuarto para guardar el resultado final. Luego complete el programa efectuando la suma de los elementos del vector construido y muéstrelo por pantalla. Compruebe que no hay errores sintácticos y efectúe su ejecución para validar su funcionalidad.

    Lo ejecutamos y mostramos dos imágenes para probar su funcionamiento, el ejemplo mostrado será:

    Vector V(2,2,2) Suma de V=6
    Este paso se repetirá dos veces más y terminaría así



    Práctica 4


    JERARQUÍA DE MEMORIA – SIJEM 2


    Responda al siguiente cuestionario. En cada pregunta se indica los ficheros de configuración y de trazas de direcciones que ilustran la pregunta.

    CUESTIONARIO
    P1.- Si el tamaño de la memoria caché de nivel 3 es de 256KB y el tamaño de bloque es de 1KB, ¿Cuántos bloques puede almacenar la caché de nivel 3?
    a. 32
    b. 64
    c. 256
    (Ya que cada bloque tiene un tamaño de 1KB y la memoria total es de 256KB)

    P2.-Si el tamaño de la memoria caché de nivel 1 es de 16KB y el tamaño de bloque es de 1KB, y teniendo en cuenta que está dividida en instrucciones y datos, ¿Cuántos bloques puede almacenar cada una de las divisiones de la caché de nivel 1?
    a. 4
    b. 8
    c. 16
    (Al igual que la anterior cada bloque tiene un tamaño de 1KB y la memoria total es de 16 KB)
    P3.-Si el tamaño del bloque de memoria caché es de 1024 Bytes ¿Cuántos bits son necesarios para representar el desplazamiento dentro del bloque?
    a. 4
    b. 8
    c. 10
    (Como el tamaño de la cache es de 1024 bytes=2^10 bytes necesitamos 10 bits para el desplazamiento )
    P4.-¿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.
    (El principio de localidad temporal afirma que si se accede a una posición de memoria esta será utilizada de nuevo en un corto intervalo de tiempo, por tanto al dividir la memoria tenemos mas probabilidades de acceder a la posición de memoria a la que se ha accedido con anterioridad)
    P5.-¿En qué posición se coloca un nuevo bloque dentro de la memoria caché sabiendo que estamos utilizando una estrategia de colocación de mapeado directo?
    a. En la posición dada por la fórmula (Número de bloque) MOD (Número de bloques de caché).
    b. En la posición dada por la fórmula (Identificador) MOD (Número de bloques de caché).
    c. En cualquier posición libre que se encuentre.

    P6.-¿En qué posición se coloca un nuevo bloque dentro de la memoria caché sabiendo que estamos utilizando una estrategia de colocación completamente asociativa?

    a. En la posición dada por la fórmula (Número de bloque) MOD (Número de bloques de caché)
    b. En la posición dada por la fórmula (Identificador) MOD (Número de bloques de caché)
    c. En cualquier posición libre que se encuentre.
     (Cuando se produce un fallo en la cache asociativa el bloque que viene de memoria principal puede guardarse en cualquier posición.)

    P7.-¿En qué posición se coloca un nuevo bloque dentro de la memoria caché sabiendo que estamos utilizando una estrategia de colocación asociativa por conjuntos?
    a. En la posición dada por la fórmula (Número de bloque) MOD (Número de bloques de caché).
    b. En la posición dada por la fórmula (Identificador) MOD (Número de bloques de caché).
    c. En cualquier posición del conjunto dado por la fórmula (Número de bloque) MOD (Número de conjuntos de la caché).
     (Cuando se produce un fallo en la memoria asociativa por conjuntos, el bloque que viene de memoria principal puede guardarse en cualquier posición de su conjunto)

    P8.-¿Cuál es el tamaño del conjunto de una memoria asociativa por conjuntos de 2 vías?
    a. 1 bloque
    b. 2 bloques
    (En una cache asociativa por conjuntos si los conjuntos están formados por n bloques se dice que es una cache asociativa de n vías.)
    c. 4 bloques

    P9.-¿Qué ocurre cuando no existe ninguna posición en la memoria caché a la que copiar un nuevo bloque, y hemos elegido una política de sustitución al azar?
    a. Se elige un bloque cualquiera para sustituir con el nuevo bloque.
    b. El nuevo bloque no se escribe en la memoria caché.
    c. Se elige el primer bloque de la memoria para sustituirlo con el nuevo bloque.

    P10.-¿Qué bloque de caché se reemplaza cuando elegimos una política de sustitución FIFO?
    a. Un bloque cualquiera elegido al azar.
    b. El bloque que lleva más tiempo en memoria.
    (El algoritmo de sustitución FIFO reemplaza el bloque que lleve mas tiempo en memoria, es decir , el bloque que haya entrado antes en memoria(FIFO: Primero en entrar, primero en salir)
    c. Se reemplaza aquel bloque que lleva más tiempo en memoria sin ser usado.

    P11.- ¿Qué bloque se reemplaza cuando elegimos una política de sustitución LRU?
    a. Un bloque cualquiera elegido al azar.
    b. El bloque que lleva más tiempo en memoria.
    c. Se reemplaza aquel bloque que lleva más tiempo en memoria sin ser usado.
     (En la sustitución por LRU el bloque al reemplazar es el que no se utiliza desde hace mas tiempo, hay que almacenar la información adicional en la cache que permita realizar un seguimiento del uso de los bloques)

    P12.-¿Qué bloque se reemplaza cuando elegimos una política de sustitución LFU?
    a. Un bloque cualquiera elegido al azar.
    b. El bloque que lleva más tiempo en memoria.
    c. Se reemplaza aquel bloque que haya sido usado el menor número de veces.

    P13.-¿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.

    P14.-¿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é.

    P15.-¿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.
     (Al utilizar una estrategia asociativa podemos colocar el bloque de memoria en cualquiera de las posiciones de la memoria)
    b. Porque el identificador determina la posición dentro de memoria caché.
    c. Porque la memoria caché nunca se llena.

    P16.-¿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.
    (En la estrategia asociativa por conjuntos el bloque se puede colocar en cualquier posición del conjunto, sin embargo dicho conjunto se nos proporciona a través de un índice en la dirección del bloque)
    b. Para obtener la posición donde colocar el bloque.
    c. Para obtener la posición del conjunto donde colocar el bloque.

    P17.-  Cuando se utiliza escritura directa (write-through):
    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.

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

    P19.-¿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é.
     (La memoria cache dispone de un bit de modificación que indica si se ha modificado un bloque mientras se encontraba cargado en la memoria cache)
    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.

    P20.-  Ejecuta algunas líneas del programa y contesta, ¿Cuándo se actualiza el bit de modificación del bloque?
    a. Cuando se produce una escritura en memoria.
    b. Cuando se produce una lectura de memoria.
    c. Cuando hay una instrucción.

    Práctica 3


    JERARQUÍA DE MEMORIA – SIJEM 1


    page1image2160 page1image2320
    REALIZACIÓN DE LA PRÁCTICA
    Durante esta práctica haremos uso del programa SIJEM, se trata de un simulador didáctico de jerarquías de memoria.
    Permite analizar el comportamiento de una jerarquía de memoria que incluye memoria virtual, memoria principal y varios niveles de memoria caché.

    1.- Léase detenidamente el menú de ayuda para conocer la estructura y el manejo del programa.
    Realizado.

    2.- Utilizando el asistente de configuración, cargue el fichero Ejem4.cgf y deseleccione los niveles 2 y 3 de la memoria caché, cambiando el tamaño del bloque a 4096 bytes en la pantalla del nivel L3. En la pantalla de la caché de nivel 1, cambie el tamaño de la misma a 16 KB y seleccione en el recuadro de organización la opción “Mapeado directo”. Deje el resto de los datos de configuración tal como aparecen por defecto.
    Pulsando siguiente se visualiza un resumen de la configuración del sistema. Pulsando en finalizar, elegimos un programa para simular. Marque “Fichero de direcciones” y seleccione el fichero “crafty_d.trd” localizado en el directorio de Ejemplos. Pulse de nuevo en finalizar, marque la opción búsqueda de páginas y pulse comenzar.
    Ejecute completamente el programa mediante los controles de simulación y responda a las siguientes cuestiones:
    ¿Cuántos bloques tiene la caché de instrucciones de nivel 1? ¿Y la caché de datos?
    La caché de instrucciones de nivel 1 tiene 4 bloques al igual que la de datos aunque en esta simulación están vacíos.

    La dirección de memoria principal tiene 20 bits (tamaño 1 MB). ¿Cómo se interpretan estos bits en la caché L1?
    Tenemos 8 bits para el bloque que se distribuyen en 2 bits de Índice y 6 de etiqueta (TAG) además de 12 bits de desplazamiento.

    page2image15968
    Anote el número de aciertos en la memoria caché y en la memoria principal, respectivamente, así como el número de ciclos empleados por el programa.
    El no de aciertos en caché es de 41 y en MP de 49. El programa a utilizado 63835 ciclos.

    3.- Añada un nivel 2 a la caché de 32 KB de tamaño, manteniendo el resto de la configuración sin cambios. Ejecute de nuevo el mismo programa y responda a las siguientes cuestiones:
    ¿Cuántos bloques tiene la caché de nivel 2?
    Tiene 8 bloques.
    ¿Cómo se interpretan los bits de dirección en la caché L2?
    Utiliza para la etiqueta 5 bits y tres bits para indicar el índice del bloque.
    Anote el número de aciertos en la memoria caché (aciertos en L1, aciertos en L2 y aciertos totales) y en la memoria principal, respectivamente, así como el número de ciclos empleados por el programa. Compare los resultados con los obtenidos anteriormente.
    Memoria caché L1: 41 aciertos. Memoria caché L2: 33 aciertos.
    Totales en memoria caché: 74 aciertos. Memoria principal: 16 aciertos.
    No de ciclos: 70835.

    4.- Manteniendo esta última configuración con dos niveles de caché, cambie la organización a “Completamente asociativa” y, posteriormente, a “Asociativa por conjuntos de 2 vías”. Compare los resultados con los obtenidos en los apartados anteriores. Completamente asociativa:
    Memoria caché L1: 47 aciertos. Memoria caché L2: 35 aciertos.
    Totales en memoria caché: 82 aciertos. Memoria principal: 8 aciertos.
    No de ciclos: 28245.

    Asociativa por conjuntos de 2 vías: Memoria caché L1: 43 aciertos. Memoria caché L2: 37 aciertos.
    Totales en memoria caché: 80 aciertos. Memoria principal: 10 aciertos.

    No de ciclos: 31055.
    Como podemos observar el no de ciclos siendo completamente asociativa es muchísimo inferior( 28245 ciclos frente a 70835 ciclos) a los ciclos utilizados en el ejercicio anterior e inferior también a la asociativa por conjuntos de dos vías. Esto es debido en parte a que el no de aciertos tanto en caché como en memoria principal es mayor que en los otros dos casos.
    5.- Añada un tercer nivel de caché L3 de 64 KB, manteniendo el resto de la configuración sin cambios. Ejecute de nuevo el mismo programa y responda a las siguientes cuestiones (considere sólo el caso de mapeado directo):
    ¿Cuántos bloques tiene la caché de nivel 3?
    Tiene 16 bloques.
    ¿Cómo se interpretan los bits de dirección en la caché L3?
    La cache tiene 2^4 bloques, por tanto los cuatro bits menos significativos indican el índice del bloque.
    Anote el número de aciertos en la memoria caché (aciertos en L1, aciertos en L2, aciertos en L3 y aciertos totales) y en la memoria principal, respectivamente, así como el número de ciclos empleados por el programa. Compare los resultados con los obtenidos anteriormente.
    Memoria caché L1: 41 aciertos. Memoria caché L2: 33 aciertos. Memoria caché L3: 16 aciertos.
    Totales en memoria caché: 90 aciertos. Memoria principal: 0 aciertos.

    No de ciclos: 36435.
    6.- Probar dos de los siguientes ejemplos Ejem5.cfg, Ejem6.cfg, Ejem7.cfg, Ejem8.cfg, Ejem9.cfg y Ejem10.cfg con algunos de los ficheros de traza acabados en a (32bits de direcciones – 4GB memoria) y observar las diferencias entre los diferentes algoritmos de sustitución.
    Anote en cada ejemplo la configuración de la memoria, el fichero de trazas utilizado y los resultados obtenidos por cada algoritmo.
    Para ambos casos hemos cogido el fichero craffy_a con las siguientes configuraciones: la memoria caché de L1 a 4KB, de L2 8KB y la de L3 16KB.
    La primera prueba ha empleado 216655 ciclos de reloj y ha realizado 67 accesos a lectura de memoria y 33 accesos de escritura. Los aciertos han sido 8 para el L1, 3 para el L2, 5 para el L3 y 20 en memoria principal. Se han producido 64 fallos. El no de reemplazamientos para la caché L1D han sido de 88, para L2 de 81 y para L3 de 68.
    La segunda prueba ha empleado 220015 ciclos de reloj y ha realizado 67 accesos a lectura de memoria y 33 accesos de escritura. Los aciertos han sido 9 para el L1, 5 para el L2, 0 para el L3 y 22 en memoria principal. Se han producido 64 fallos. El no de reemplazamientos para la caché L1D han sido de 87, para L2 de 78 y para L3 de 70. 

    viernes, 14 de diciembre de 2012

    Práctica 2


         Una descripción resumida del desarrollo de la práctica

            REALIZACIÓN DE LA PRÁCTICA 2.

          - A partir de la información proporcionada en el menú de ayuda, indique:
     a) El número de series de test (test suites) estándar que emplea el programa y los tests específicos que conforman cada serie. Realice una breve descripción de cada uno de ellos.
    o   Disk: Sequential Read, sequential Write, RAndom Seek+RW , realiza un test de disco
    o   CD/DVD: Read, realiza un test de cd y dvd.
    o   Memory: Allocate Small, Read Cached, Read Uncached, Write, Large RAM, realiza un test de memoria RAM.
    o   3D Graphics: Simple, Medium, Complex, DirectX 10, realiza un test de Graficos 3D.
    o   2D Graphics: Solid Vectors, Transparent Vectors, Complex Vectors, Windows Interface, Image Filters, Image Rendering, realiza un test de Graficos 2D.
    o   CPU: Integer Math, Floating Point Math, Find Prime Numbers, Multimedia Instructions, Compression, Encryption, Physics, String Sorting, realiza un test de la CPU.
    b) El peso asignado a cada una de las series para determinar la clasificación final.
    o   Disk(21%)
    o    CD/DVD(5%)
    o   Memory(19%)

    o   3D Graphics(12%)
    o   2D Graphics(14%)
    o   CPU(29%)
    c) Las unidades usadas para medir:
                - La cantidad de información transferida hacia o desde la unidad de disco o la memoria Bytes/Sec
               - El número de operaciones matemáticas con enteros o en coma flotante POps./Sec
                - Las prestaciones gráficas en 2D mil Vectores/Seg, Complejo Vectores/Seg., Operaciones por segundos, Filtros por seg.
                - Las prestaciones gráficas en 3D Marcos por segundos 

    2.- Anote la información más relevante (sistema operativo, CPU, tarjeta gráfica, etc.) del ordenador bajo prueba (se puede obtener seleccionando la pestaña System).
    SO: Windows 7(32 bits). 

    CPU: Intel Core2 Duo P8400 @ 2,26Ghz. 

    Memoria slot1: DDR2, 2048 MB, 800MHz 

    Memoria slot2: DDR2, 2048 MB, 800MHz 

    Gráfica: ATI Mobility Radeon HD 3400 Series 

    3.- Realice un test completo del ordenador usado en la práctica: 
Tests"Run All Tests.
Cree una tabla con los valores medios obtenidos en cada una 
de las series de tests:
    CPU Mark: 1528,2

    2D Graphics Mark: 206,3
    3D Graphics Mark: 114,8
    Memory Mark: 587,9
    Disk Mark: 364,4

    CD Mark: 270,0

    Clasificación final (PassMark Rating): 607,8
     

         Detección de posibles errores que contenga la práctica (si los hubiera).
    o   Pienso que hay que buscar software multiplataforma para la realización de las practicas, porque por ejemplo en mi caso utilizo macintosh, y no había forma de utilizar el PerfomanceTest, solo existe la versión para Windows xp, vista y 7, he tenido que utilizar otros programas como por ejemplo Xbench, que este si es para mac, o Phoronix Test Suite, lo cual ya no me ayuda ya que el manual que viene en la web es para el PerformanceTest.
         Proponer mejoras en la práctica o un nuevo enfoque (¿piensas que el enunciado se debería haber enfocado de otra forma?).

    o   A partir de Windows Vista, Windows tiene un incluido de prueba de rendimiento, pero seguimos en las mismas en los demás sistemas operativos no, en Ubuntu puedes utilizar uno sencillo llamado Hardinfo, para Mac también existen unos cuantos. Pero yo propongo uno multiplataforma y he encontrado uno muy bueno: Phoronix Test Suite, se debería hacer un manual como el que hay hecho y así ya no habrá problemas de compatibilidad de este tipo.