OBJETIVOS ALGUNAS CONSIDERACIONES SOBRE WINDLX

Arquitectura de Sistemas Paralelos 3 curso de Ingeniería Técnica en Informática de Sistemas Práctica: Procesador segmentado DLX. Técnicas de optimizac...
15 downloads 0 Views 58KB Size
Arquitectura de Sistemas Paralelos 3 curso de Ingeniería Técnica en Informática de Sistemas Práctica: Procesador segmentado DLX. Técnicas de optimización 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. 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). Para comenzar una nueva simulación hay que inicializar el DLX usando la opción del menú File llanada Reset DLX (con RESET All se inicializa también la memoria, por lo que es necesario cargar de nuevo el programa).

REALIZACIÓN DE LA PRÁCTICA El alumno antes de asistir al laboratorio debe: • • • •

estudiar la arquitectura y juego de instrucciones del DLX repasar los conceptos relacionados con la segmentación de procesadores conocer las técnicas estudiadas para optimizar la ejecución de código en procesadores segmentados haber asimilado las consideraciones expuestas sobre el simulador WinDLX

Una de las técnicas más utilizadas para mejorar las prestaciones de los procesadores segmentados es el desenrollado de bucles (loop unrolling). El objetivo es obtener un conjunto de instrucciones no relacionadas que pueden ser usadas para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo. El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos. Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar convenientemente el código (planificación de instrucciones). A continuación se muestra un ejemplo en el que se aplica esta técnica.

for (i=0;i

Suggest Documents