
Herramientas de Apoyo al Desarrollo de Software Paralelo
y Distribuido.
Doble Animación de un Plano, Carlos
Cruz-Diez, 1959
(reproducido con permiso del autor)
Proyectos en Curso
En el seno del Grupo
de Investigación en Sistemas Paralelos y Distribuidos estamos
desarrollando una serie de proyectos , que te permitiran
desarrollar tus conocimientos en el campo de las redes, los sistemas
distribuidos y la computación de alto desempeño. Los proyectos que se
ofrece son parte del proyecto global de desarrollo de herramientas de
software que faciliten la elaboración de aplicaciones
distribuidas. Los proyectos están relacionados con el diseño e
instalación de un "cluster" de estaciones de trabajo Pentium II
conectadas a traves de una red de alta velocidad tipo Myrinet, de 1.28
Gbps.
Actualmente hay cuatro proyectos de grado en los que se
están desarrollando herramientas de ayuda a la programación
de aplicaciones distribuidas. Estas herramientas son:
- Programación
Tolerante a Fallas. La ejecución
de programas que toman mucho tiempo puede ser interrumpida por causas
externas, como por ejemplo caída de la electricidad. Se está
implementando un sistema que permita la ejecución parcial de programas
paralelos a partir del punto en que fueron interrumpidos (o cerca de
este punto). La herramienta se basa en otra herramienta pre-existente
que usa puntos de control ("checkpoints") en programas
secuenciales. La primera fase consiste en portar dicha
herramienta al sistema de operación Linux y la segunda implementar un
algoritmo que permite hacer el punto de control ("checkpoint")
distribuido. Este proyecto está a cargo de Argenis Fernández y Hugo Cira.
- Visualización de
Desempeño de Programas Paralelos.
La visualización del desempeño de programas paralelos es esencial para
realizar depuración y entonación de desempeño. Existe una herramienta
de visualización denominada UPSHOT que permite ver gráficamente la
ejecución de un programa paralelo. La desventaja principal de dicha
herramienta es que necesita que el programador agregue trazas al
programa, en forma de llamadas a una libreria denominada MPE. Se está
implementando un traductor que agregue las trazas necesarias en forma
automática. El traductor se está haciendo para lenguaje C y se basa en
un compilador de este lenguaje, llamado lcc, cuyos fuentes están
públicamente disponibles. Este proyecto está a cargo de Daniel Jordán.
- Herramienta de
Despacho de Programas. Se está
desarrollando una herramienta que proveerá la facilidad de despacho de
trabajos "batch" en el "cluster" de estaciones de trabajo. La
especificación de los requerimientos de un programa se hace a través
de un archivo de órdenes, con un lenguaje sencillo. Una de las
interfaces que se proveerá para la utilización del sistema de despacho
será un hojeador de Web. Este proyecto está a cargo de Rafael Angarita.
-
Sistema de Archivos Paralelos. Se está
implementando un sistema de archivos paralelos que permita almacenar archivos
en forma distribuida, es decir, particionados de tal forma que diferentes
segmentos del mismo archivo estarán almacenados en diferentes máquinas.
Esto permitirá acelerar el acceso a los datos, siempre que se usen
programas que requieran los datos en paralelo, con el mismo patrón
de distribución. Se está implementando un conjunto básico
de llamadas de librería (creat, open, read, write, close) para este
tipo de archivo y una serie de comandos para convertir archivos secuenciales
en archivos distribuidos y viceversa. Este proyecto está a cargo
de Eduardo Blanco y Ricardo
Chacón.
Proyectos que se
ofrece
Algunos de los proyectos anteriores podrán ser tomados como base para
continuar, con la finalidad de obtener un producto más acabado. Si
están interesados en algunos de ellos, pueden hablar con nosotros.
Otros posibles proyectos se enumeran a continuación.
- Monitor de Desempeño. Áreas relacionadas: Redes, Sistemas de Operación
(Concurrencia), Interfaces. Con la instalación del "cluster" de
estaciones de trabajo que planifica el Grupo
de Sistemas Paralelos y Distribuidos, sería de gran utilidad el
desarrollo de una herramienta que permita monitorear constantemente el
comportamiento de la red. La forma que tomaría la herramienta sería la
de una interfaz gráfica que represente la carga de trabajo que esté
ejecutándose en cada nodo (tiempo de CPU utilizado, estado de la
memoria, operaciones de E/S, etc.). Este monitor de desempeño podrá
incluir información relacionada con el comportamiento del
programa paralelo que se esté ejecutando en ese momento.
- Despacho de Programas (II) Áreas relacionadas: Redes, Sistemas de Operación
(Concurrencia). Se desea integrar los proyectos Programación Tolerante a Fallas y Herramienta de Despacho de Programas, con la
finalidad de obtener un despachador de programas que pueda fragmentar
la ejecución de un programa muy largo en pedazos que se ejecuten en
varias sesiones. El mecanismo de "checkpoints" permitirá cancelar el
programa en ejecución, para volverlo a ejecutar posteriormente, desde
el punto en que quedó.
-
Depuración de Programas Paralelos.
Áreas relacionadas: Redes, Sistemas de Operación
(Concurrencia), Interfaces. Este proyecto consiste en desarrollar
una interfaz gráfica que permita utilizar gdb (el depurador de GNU)
con programas paralelos. El desarrollo de dicha interfaz podrá realizarse
a partir de algún prototipo ya desarrollado que esté accesible
vía Internet. Básicamente se requiere tener una interfaz
de ventanas que permita tener abierto un gdb por cada proceso del programa
paralelo. Este sistema deberá desarrollarse para que funcione en
el "cluster" de estaciones de trabajo corriendo Linux.
-
Visualización de Desempeño de Programas
Paralelos (II). Áreas relacionadas:
Traductores, Sistemas Distribuidos. Se está desarrollando
una herramienta para lenguaje C que permita insertar trazas automáticamente,
para ver posteriormente la ejecución del programa paralelo an forma
gráfica. Ver la descripción de esta herramienta aquí.
Se desea una herramienta similar para Fortran.
- Generación de Código Paralelo.
Áreas relacionadas: Redes, Sistemas de Operación
(Concurrencia), Traductores. Se ha elaborado un lenguaje de
especificación de programas paralelos, llamado Lebep, y un traductor
que permite generar código paralelo a partir de un lenguaje de
especificación de alto nivel. Este lenguage incluye "Send" y "Receive"
como especificaciones básicas de comunicación. Se desea extender el
conjunto básico de especificaciones para cubrir un espectro más
completo de funciones de comunicación, basándose en las funciones
ofrecidas en la librería estándar MPI (Message Passing Interface). En
particular se desea añadir funciones de comunicación colectiva.
-
Reingenieria de Código para Reducir Tiempo
de Ejecución (I). Áreas relacionadas:
Organización del Computador, Traductores. Existen varias
técnicas de optimización que permiten mejorar dramáticamente
el tiempo de ejecución de un programa en arquitecturas RISC. Muchas
se basan en la reescritura de los ciclos de tipo "for", usando técnicas
sencillas de traducción. El objetivo de este proyecto es implementar
un traductor que reescriba los ciclos "for" utilizando algunas de estas
técnicas. La herramienta se basará en el traductor
de programas en lenguaje C que actualmente está elaborando Daniel
Jordán.
-
Reingenieria de Código para Reducir Tiempo
de Ejecución (II). Áreas relacionadas:
Organización del Computador, Traductores. Para los expertos
en emacs-lisp, tenemos una variante del proyecto anterior. Esta variante
requiere desarrollar un módulo de emacs (en emacs-lisp) para seleccionar
trozos de código a tiempo de edición y realizar las transformaciones
de código que conduzcan a mejoramiento en el desempeño. En
caso de haber más de un grupo interesado en este proyecto, se podrá
definir proyectos equivalentes para optimizar código en Fortran77
o Fortran90.
-
Instalación y Entonación de Librerías
de Cómputo Científico. Áreas
relacionadas: Sistemas de Programas e Interfaces. Existen varias
librerias estándar que permiten realizar operaciones básicas
sobre matrices (multiplicación, cálculo de inversa, etc.).
El objetivo de este proyecto es instalar estas librerias en el "cluster"
de estaciones de trabajo (corriendo Linux), realizar los ajustes necesarios
para mejorar el desempeño y elaborar un conjunto de páginas
de Web que explique el uso de las distintas funciones.
- Traductor de "F" a "C". Áreas relacionadas: Traductores. "F" es un
lenguaje de programación definido como un subconjunto de Fortran90.
Puede decirse que es una especia de Fortran "pascalizado". La
gramática es bastante regular, con una descripción en forma BNF bien
sencilla, por lo que el parser debe ser relativamente sencillo de
programar. El objetivo de este proyecto es hacer un parser que genere
una estructura de datos intermedia y luego un generador del programa
en lenguaje C a partir de dicha estructura de datos.
Para mayor información, ponerse en contacto con la Prof. Yudith Cardinale, el Prof. Emilio Hernández o el Prof. Alejandro Teruel.