cambiar a curso:   2018-19   2020-21


Grado en Ingeniería Informática


TRABAJOS FIN DE GRADO
curso: 2019-20

Ensamblador funcional para el análisis de algoritmos de planificación estática de instrucciones


Tecnologías Específicas

Ingeniería de Computadores
 


Descripcion y Objetivos

En el diseño de procesadores con múltiples núcleos, para poder incrementar el número de éstos, se sacrifican algunas de las técnicas tradicionales para mejorar el rendimiento del procesador. Como consecuencia, estos núcleos son más simples y tiene sentido entonces aplicar en ellos técnicas que parecían estar recibiendo últimamente menor atención. Es el caso de la planificación de instrucciones realizada por el compilador, menos importante en procesadores con ejecución fuera de orden, pero que recobra interés en los núcleos simples, con ejecución en orden, de algunos procesadores multinúcleo actuales.

Por tanto, es interesante considerar nuevos y mejores algoritmos de planificación estática de instrucciones para obtener códigos con un mejor rendimiento sobre los núcleos que componen esos procesadores. Es importante tener en cuenta que estos algoritmos de planificación serán más eficaces si en su diseño se considera la arquitectura del procesador que en última instancia procesará el código obtenido tras aplicar esos algoritmos.

Las técnicas de planificación estática de instrucciones son aplicadas en la etapa de compilación y de ahí que se deba tener en cuenta también este hecho en el diseño de dichas técnicas. Será en la fase de optimización del compilador en la que, junto con otras técnicas, se deban incluir también las de planificación de instrucciones.

El objetivo de este Trabajo Fin de Grado es mostrar el efecto de la planificación estática de instrucciones, creando para ello el soporte necesario, sin tener que recurrir a herramientas que ya pudieran estar disponibles. Esto permitirá, además, que el alumno conozca con detalle la estructura y características principales de un compilador.

Se ha elegido ARM como arquitectura de procesador sobre la que va a girar todo el trabajo. Sus características la hacen muy adecuada para este caso puesto que no añade excesiva complejidad a las tareas a realizar.

Para lograr el objetivo principal antes mencionado, se deben ir alcanzando ciertos objetivos parciales:

1. Conocer en detalle la arquitectura ARM.

2. Conocer los fundamentos de los compiladores.

3. Entender la forma de operar de los algoritmos de planificación.

4. Comprender e interpretar correctamente los resultados obtenidos al estudiar el efecto de la planificación estática de instrucciones.

 


Metodología y Competencias

Las tareas que deberán completarse para lograr el objetivo del trabajo se realizarán siguiendo la metodología utilizada habitualmente en este tipo de trabajos, que en general consiste básicamente en: mostrar el estado actual de un determinado aspecto hardware/software; justificar la conveniencia de realizar un estudio sobre su comportamiento; proponer o revisar alternativas que puedan mejorar su estado actual; y realizar un estudio comparativo, basado en rendimiento, de los casos considerados.

Al aplicar dicha metodología al caso particular de este Trabajo Fin de Grado, se obtienen las siguientes tareas principales a realizar:

1. Revisión de las características de la arquitectura ARM, para conocer los aspectos necesarios para realizar el trabajo, esto es, las unidades funcionales disponibles, el conjunto de instrucciones o las latencias de éstas al usar aquellas. Para realizar esta tarea se consultará la información que ARM tiene disponible en su web así como otros documentos si fuera necesario.

2. Estudio de los fundamentos de los compiladores, para poder obtener uno básico y funcional en el cual incluir un algoritmo de planificación de instrucciones. Se consultará documentación sobre compiladores, fundamentalmente algún libro de referencia sobre compiladores modernos.

3. Revisión de técnicas o algoritmos de planificación estática de instrucciones, para llevar al compilador alguno de ellos y poder estudiar sus efectos sobre el rendimiento del código en el procesador considerado. Se revisará la información disponible, libros o artículos, en los que se describa el funcionamiento de uno o varios de estos algoritmos.

4. Implementación de las fases principales de un compilador. Se incluirán al menos el analizador léxico, el analizador sintáctico, la obtención de código intermedio, la creación del grafo de dependencias, el algoritmo de planificación de instrucciones y la asignación de recursos.

5. Estudio del efecto de la planificación de instrucciones, evaluando su comportamiento sobre diferentes códigos ensamblador. Una vez obtenidos los códigos, tras la fase de compilación, se procesarán en un simulador que modele la arquitectura ARM considerada. No se descarta la posibilidad de realizar esta última fase en una máquina real, aunque esto quedará supeditado a tener acceso a dicha máquina.

Las competencias que se aplican en el caso de la Tecnología de Ingeniería de Computadores son:

- [IC2] Capacidad de desarrollar procesadores específicos y sistemas empotrados, así como desarrollar y optimizar el software de dichos sistemas.

- [IC3] Capacidad de analizar y evaluar arquitecturas de computadores, incluyendo plataformas paralelas y distribuidas, así como desarrollar y optimizar software para las mismas.

En ambos casos será la componente software la que será abordada, pero teniendo en cuenta una arquitectura determinada sobre la que girará buena parte del trabajo.

 


Medios a utilizar

Para realizar el grueso de las tareas anteriormente enumeradas no serán necesarios recursos especiales. Sólo se requerirá acceso a la biblioteca de la universidad y acceso a Internet, para realizar la totalidad de las consultas necesarias para completar las tres primeras tareas. Las otras tareas se podrán realizar utilizando un ordenador (portátil o de sobremesa) y el lenguaje de programación que se considere más adecuado, puesto que todo el código requerido será desarrollado por el alumno.

Para la fase de evaluación, se usará un simulador o, si fuera posible, una máquina real. En el primer caso, el simulador debe modelar un procesador con arquitectura ARM, y en el segundo, la máquina o plataforma debe incluir un procesador real que implemente dicha arquitectura.

 


Bibliografía

- Aho, Alfred V. "Compilers: principles, techniques, and tools". Pearson/Addison Wesley. 2007

- ARM. "ARM architecture reference manual". 2019

- ARM. "ARM compiler: armasm reference guide" v. 6.0. 2014

- ARM. "ARM instruction set: reference guide" v. 1.0. 2018

- Cooper, Keith D.; Torczon, Linda. "Engineering a compiler". Morgan Kaufmann Publishers. 2012

- Bal, Henri E; Grune, Dick. "Diseño de compiladores modernos". McGraw-Hill/Interamericana de España. 2007

- Ruiz, Jacinto. "Compiladores: teoría e implementación". RC Libros. 2010

 

 


Tutor


SÁNCHEZ GARCÍA, JOSÉ LUIS
 

Alumno


SÁNCHEZ ORDÓÑEZ, ALBERTO