Computación Paralela y Distribuída / Grupo Arquitectura Computadores.

+ Computación Paralela y Distribuída

- Compiladores para arquitecturas paralelas:

Generación automática de código paralelo: Esta línea de investigación direcciona la paralelización automática de programas secuenciales. Se aborda el desarrollo de técnicas de compilación para convertir un programa secuencial en un programa concurrente ejecutable en arquitecturas multi-core y many-core. En concreto, estamos trabajando en el desarrollo de técnicas de análisis avanzado de programas para descubrir el paralelismo implícito en los programas secuenciales y el desarrollo de técnicas de transformación de código orientadas a la construcción de la versión paralela más eficiente de un programa secuencial.

Optimización iterativa: Nuestro grupo está trabajando en la optimización iterativa de códigos sobre arquitecturas heterogéneas que incluyen GPUs y/o CPUs. La optimización iterativa permite generar un enorme número de versiones optimizadas de la misma aplicación y selecciona la versión más rápida para una arquitectura dada por medio de modelos analíticos, heurísticas o la ejecución del código real.

 

- Leguajes y librerías para computación paralela:

Nuestro grupo diseña y elabora herramientas (Servet) y librerías (HTA, UPCBLAS) para mejorar la productividad de los programadores, en especial en el desarrollo de aplicaciones paralelas. Servet es un conjunto de benchmarks portables utilizados para medir los parámetros hardware más representativos que permitan la optimización automática de aplicaciones en clusters de multicores. Hierarchically Tiled Array o HTA es una librería diseñada para facilitar la escritura de programas basados en bloques en lenguajes orientados a objetos. Su objetivo es mejorar la localidad de los accesos a memoria y facilitar al programador la explotación del paralelismo de datos. UPCBLAS es una librería numérica paralela para computaciones con matrices densas utilizando el lenguaje de programación PGAS (Partitioned Global Address Space) UPC (Unified Parallel C). La popularidad de los lenguajes PGAS ha incrementado en los últimos años gracias a su alta programabilidad y rendimiento, especialmente en arquitecturas jerárquicas como los clusters de multicores.

Nuestras propuestas, que cubren sistemas de memoria distribuida, compartida e híbrida, dan lugar a códigos mejor estructurados, más legibles y fáciles de mantener que aquellos construidos con las herramientas estándar, mientras que el rendimiento es muy similar. Gran parte de esta investigación se ha desarrollado en colaboración con universidades líderes como la University of Illinois at Urbana-Champaign o empresas de primer nivel como HP ó IBM.

 

- Tolerancia a fallos y maleabilidad de aplicaciones paralelas:

Los sistemas utilizados para le ejecución de aplicaciones paralelas de larga duración deberían proporcionar algún mecanismo de tolerancia a fallos ya que la probabilidad de fallo aumenta con el tiempo de ejecución y el número de nodos. El checkpointing y la posterior recuperación es una de las técnicas más populares para proporcionar soporte de tolerancia a fallos. Nosotros hemos desarrollado CPPC (ComPiler for Portable Checkpointing), una herramienta de tolerancia a fallos a nivel de aplicación para aplicaciones paralelas de paso de mensajes diseñada con especial énfasis en la portabilidad.

Actualmente estamos explorando la posibilidad de implementar maleabilidad en las aplicaciones MPI como una extensión de la herramienta CPPC, de forma que la aproximación final permita la reconfiguración transparente durante la ejecución de la aplicación.

 

 

- Computación de propósito general sobre GPUs:

En este campo se está trabajando en el desarrollo de una herramienta que permita la implementación automática o semiautomática de un algoritmo sobre una GPU. Otra meta de esta línea de investigación es la implementación de bibliotecas de funciones para sistemas multi-GPU que faciliten el desarrollo de aplicaciones que necesiten una comunicación eficiente entre las diferentes GPUS. En ambos casos se plantea que el trabajo desarrollado sea útil para los principales lenguajes de programación usados en este tipo de sistemas, como OpenCl y Cuda.

 

 

 

<-- Volver a Investigación