ARQUITECTURA DE SISTEMA PARALELOS I

Transcripción

ARQUITECTURA DE SISTEMA PARALELOS I
Arquitectura de Sistemas Paralelos
3 curso de Ingeniería Técnica en Informática de Sistemas
Práctica: Procesador segmentado DLX. Bloqueos de datos y control
Curso 2005/2006
er
OBJETIVOS
En esta práctica se pretende estudiar el comportamiento de un procesador segmentado, comprobar el efecto de los
bloqueos de datos y control sobre las prestaciones así como evaluar algunas técnicas para reducir estos bloqueos. Para
ello, utilizaremos el simulador WinDLX (de libre distribución, disponible en http://www.atc.us.es/?op=descargas). Se
trata de un simulador del procesador segmentado DLX. Con esta práctica se pretende que el alumno:
• se familiarizarse con la arquitectura y el juego de instrucciones del DLX
• consolide sus conocimientos sobre segmentación de procesadores
• utilice simuladores para evaluar el rendimiento de un procesador
• aplique algunas de las técnicas estudiadas para optimizar la ejecución en procesadores segmentados
ALGUNAS CONSIDERACIONES SOBRE WINDLX
WinDLX es un simulador de fácil manejo (basado en ventanas y menús simples) que emula completamente el DLX,
tanto la cadena de ejecución, como los contenidos de la memoria, el fichero de registros y los registros temporales.
Además, consta de varios parámetros configurables por el usuario.
Dispone de seis ventanas en las que se detalla toda la información relativa a la ejecución de las instrucciones:
•
Register Window. Muestra tanto el contenido de los registros de usuario (enteros y de punto flotante) como el
de los registros internos de la máquina. De estos últimos, destacamos los siguientes:
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
•
PC: Contador de programa, contiene la dirección de la próxima instrucción a cargar
IMAR: Contiene la dirección con la que se accede a memoria para cargar la instrucción actual (siempre
valdrá 4 menos que el PC, excepto en los saltos)
IR: Registro de instrucción, contiene la instrucción a ejecutar
A y B: Son dos registros temporales que almacenan el valor de los operandos de la instrucción
ALU y ALUHI. Están a la salida de la ALU entera, de forma que su contenido es el resultado de la
operación aritmético-lógica. ALUHI es la parte alta.
DMAR: Contiene la dirección con la que se accede a memoria para transferir un dato en una instrucción
Load o Store.
Clock Cycle Diagram Window. Muestra la cadena de ejecución de las instrucciones en cada ciclo de reloj. Al
ser el DLX un procesador segmentado, varias instrucciones se ejecutan solapadas en el tiempo. El DLX
subdivide cada instrucción en 5 etapas o fases (IF-ID-EX-MEM-WB), de manera que existen 5 instrucciones
ejecutándose a la vez pero en etapas diferentes, como se observa en la Figura. Haciendo doble click sobre una
instrucción puede obtenerse información completa sobre su ejecución.
•
Code Window. Muestra información detallada (dirección de memoria, código de instrucción y nemotécnico)
sobre el programa que ha sido cargado. Cada instrucción aparece en un color distinto según la etapa en la que
se encuentre, como se ve observa en la figura. Haciendo doble click sobre una instrucción puede obtenerse
información completa sobre su ejecución.
•
Pipeline Window. Muestra un gráfico de la cadena de ejecución del DLX. Además de la cadena de ejecución
para operaciones enteras, aparecen las unidades de ejecución para operaciones flotantes. Algunos parámetros
relacionados con éste último tipo de operaciones pueden ser configurados.
•
Statistics Window. Muestra información de carácter estadístico sobre la ejecución del programa cargado:
número de ciclos, número de bloqueos (por tipo), estadísticas sobre el tipo de instrucción, etc.
•
Breakpoints Window. Muestra los puntos de ruptura que el usuario ha establecido en el programa.
En un procesador segmentado, la depuración y simulación de un programa es una tarea compleja, pues en un mismo
ciclo de reloj existen varias instrucciones ejecutándose a la vez (en nuestro caso 5). Por ello, el contenido de los
registros internos en un determinado ciclo de reloj depende la etapa en que se encuentre cada instrucción. Por tanto,
para entender los valores de los registros que aparecen en la ventana Register Window hay que conocer previamente en
qué fase está cada instrucción.
El WinDLX dispone de un menú (Configuration) para la configuración del simulador (ver Figura). La configuración
debe establecerse como muestra la Figura. De esta manera, las direcciones serán numéricas y no simbólicas (etiquetas)
y la cuenta de ciclos será absoluta y no relativa al PC. La opción “Enable Forwarding” permite habilitar los desvíos de
datos (bypass o forwarding).
También se dispone de un menú (Memory) mediante el cual es posible visualizar el contenido de la memoria (Display),
cambiarlo (Change) y ver las etiquetas del código (Symbol). La dirección por defecto del código empieza en la posición
0x00000100 ($TEXT) y la de datos en 0x00001000 ($DATA).
Utilizando el menú File (Load Code or Data) puede cargarse el programa que quiere simularse. Debe ser un archivo de
texto con extensión .S y ser seleccionado previamente en la ventana Selected Files. Para inicializar la simulación hay
que usar la opción del mismo menú llanada Reset DLX (con RESET All se establece también la configuración que tiene
por defecto el simulador).
Mediante el menú Execute podemos realizar la simulación completa (Run), paso a paso (Single cycle) o ejecutar un
número determinado de ciclos (Multiple cycles)
REALIZACIÓN DE LA PRÁCTICA
El alumno antes de asistir al laboratorio debe:
• estudiar la arquitectura y juego de instrucciones del DLX
• conocer los conceptos relacionados con la segmentación de procesadores
• haber asimilado las consideraciones expuestas sobre el simulador WinDLX
En la práctica se estudiarán tanto las dependencias de control como las de datos. Las primeras se dan en las
instrucciones de salto, pues la siguiente instrucción a ejecutar no se encuentra en la posición apuntada por el contador
de programa sino que ésta tiene que ser calculada. En los saltos condicionales hay que calcular además la condición. El
DLX sigue una estrategia de salto no tomado: si el salto finalmente no se toma la etapa IF ejecutada es válida y, por
tanto, no se produce ningún ciclo de bloqueo (Figura superior); sin embargo, si el salto se toma, es necesario ejecutar de
nuevo la etapa IF con el destino de salto ya calculado (Figura inferior).
Las dependencias de datos surgen cuando dos instrucciones próximas en el código utilizan datos comunes, ya que la
segmentación cambia la temporización relativa de las instrucciones al solapar su ejecución. Existen tres tipos:
dependencias reales (RAW, lectura después de escritura), antidependencias (WAR, escritura después de lectura) y
dependencias de salida (WAW, escritura después de escritura). En el DLX, las dependencias que producen bloqueos se
dan cuando una instrucción lee un registro antes de que una instrucción anterior haya escrito el valor correcto (RAW).
En el siguiente ejemplo la dependencia ocurre en el acceso al registro r2 (en la etapa WB de la primera instrucción se
escribe el registro y en la etapa ID de la segunda se lee).
Causa del bloqueo, se detecta en ID (color marrón)
Para evitar los bloqueos producidos por las dependencias de datos (¡no todos pueden evitarse!) puede utilizarse la
técnica denominada forwarding o adelantamiento. Esta técnica consiste en crear caminos entre las unidades
funcionales para que las instrucciones dispongan de los datos antes de que se lleve a cabo la etapa WB de la instrucción
que los ha calculado. Estos caminos se denominan desvíos o bypass. En el simulador WinDLX los bypass se activan en
el menú de configuración. La siguiente figura muestra la ejecución del programa anterior pero teniendo activado los
desvíos.
Desvío (color verde)
Una de las técnicas más utilizadas para mejorar las prestaciones de los procesadores segmentados es la reordenación del
código (planificación): reordenando convenientemente las instrucciones pueden aprovecharse los ciclos de bloqueo
entre instrucciones dependientes para ejecutar alguna otra instrucción.
Ejercicios a realizar por el alumno
Supongamos el siguiente código en ensamblador obtenido al desenrollar un bucle que suma dos unidades a cada
elemento de un vector de 15 elementos que comienza en la posición 0:
bucle:
add
lw
addi
sw
lw
addi
sw
lw
addi
sw
addi
seq
beqz
sw
r4, r0, r0
r1,0(r4)
r1,r1,2
0(r4),r1
r2,4(r4)
r2,r2,2
4(r4),r2
r3,8(r4)
r3,r3,2
8(r4),r3
r4, r4, 12
r5, r4, 60
r5, bucle
60(r0), r0
trap
0
; instruccion para finalizar la ejecución.
1.- Utilizando el WinDLX simule el código en un DLX sin desvíos (Enable Forwarding desactivado). Conteste en la
hoja que se adjunta a las siguientes cuestiones:
a) ¿Cuántos bloqueos se producen? ¿De qué tipo son? Explique porqué se producen estos bloqueos
b) ¿Cuál es la duración (en ciclos) del programa? Para medir el tiempo de ejecución contaremos los ciclos
desde la etapa IF de la primera instrucción útil hasta la etapa WB de la última (Trap 0 no se considera una
instrucción útil)
c) ¿Qué valores toman al final de la ejecución del programa los registros R1, R2, R3, R4, y R5 y las
direcciones de memoria afectadas? ¿Son los esperados? Inicialice el contenido de la memoria afectada a
un determinado valor antes de ejecutar el código. Puede utilizar la opción Change del menú Memory o
inicializarla a cero con Reset All (Reset DLX no lo hace). Recuerde que si utiliza Reset All debe volver a
configurar el simulador
d) ¿En todas las iteraciones se producen bloqueos de control? Justifique su respuesta
2.- Reordene el código para eliminar el mayor número de bloqueos posible. No se pueden eliminar ni añadir
instrucciones de ningún tipo (ni siquiera NOP’s). Simule el código y compruebe que al final de la ejecución los valores
de los registros y las direcciones de memoria afectadas son los mismos que los obtenidos en el apartado 1. Conteste en
la hoja que se adjunta a las siguientes cuestiones:
a) Escriba el código reordenado y justifique la decisión tomada
b) ¿Cuál es la duración (en ciclos) del programa? ¿Hay algún bloqueo que no haya podido ser eliminado?
Justifique su respuesta
c) ¿Qué aceleración se ha conseguido? Recuerde que la aceleración es el tiempo del programa sin reordenar
dividido entre el tiempo del programa reordenado
3.- Simule el código sin reordenar en un DLX con todos los desvíos activados (Enable Forwarding activado). Conteste
en la hoja que se adjunta a las siguientes cuestiones:
a) ¿Cuántos bloqueos se producen? ¿De qué tipo son? Explique porqué se producen estos bloqueos
b) ¿Cuántas veces se utilizan los desvíos? ¿Entre qué unidades funcionales se dan? Justifique su respuesta.
c) Calcule el número de ciclos de bloqueo por instrucción y el CPI (ciclos por instrucción)
Arquitectura de Sistemas Paralelos
3 curso de Ingeniería Técnica en Informática de Sistemas
Práctica: Procesador segmentado DLX. Bloqueos de datos y control
Curso 2005/2006
er
ALUMNO:
Ejercicio 1
a
b
c
d
Ejercicio 2
a
b
c
Ejercicio 3
a
b
c

Documentos relacionados