High-performant and easy-to-use solutions for complex parallel problems
- Álvarez Martínez, Millán
- Basilio B. Fraguela Director
- José Carlos Cabaleiro Domínguez Director/a
Universidad de defensa: Universidade da Coruña
Fecha de defensa: 21 de junio de 2024
- Javier Díaz Bruguera Presidente/a
- Margarita Amor Secretaria
- Diego R. Llanos Vocal
Tipo: Tesis
Resumen
En las arquitecturas multinúcleo y sistemas distribuidos disponibles en la actualidad,explotar el paralelismo de las aplicaciones es necesario para alcanzar altos niveles de rendimiento. Lograr aprovechar todos los recursos de estos sistemas mediante la programación paralela no es algo trivial, y comúnmente se requiere un gran esfuerzo por parte del programador y un alto conocimiento de la tecnología y de los sistemas utilizados. A pesar de que existen múltiples investigaciones en el campo de desarrollo de aplicaciones paralelas, muchas de las soluciones actuales tienen limitaciones significativas en cuanto a su aplicabilidad, rendimiento y/o usabilidad. En esta Tesis se presentan nuevas herramientas de soporte al desarrollo de aplicaciones paralelas en forma de librerías de software con el objetivo de reducir así sus costes de desarrollo y mantenimiento. Estas herramientas proporcionan soluciones eficientes a problemas complejos, haciendo uso internamente de avanzadas técnicas paralelas para alcanzar altos rendimientos, mientras se mantiene de fácil uso para el usuario.Las dos primeras propuestas son librerías paralelas basadas en esqueletos que tienen como objetivo resolver problemas de divide y vencerás, especialmente aquellos desbalanceados y con altos niveles de recursividad. La primera lo hace para sistemas de memoria compartida, mientras que la segunda lo hace para sistemas híbridos de memoria distribuida-compartida. Finalmente, se presenta un nuevo modelo de paralelización especulativa a nivel de hilos y su implementación en una librería. Esta estrategia hace uso de técnicas de ejecución paralela especulativa para permitir la paralelización de casi cualquier bucle, incluso aquellos con dependencias que los hacen inicialmente difíciles de paralelizar, sin apenas necesitar realizar modificaciones en el código original. El lenguaje empleado para las implementaciones es C++, pues es un lenguaje ampliamente utilizado que proporciona un muy buen nivel de rendimiento,al mismo tiempo que permite programación genérica mediante plantillas y otras abstracciones, las cuales son perfectas para el desarrollo de librerías avanzadas de gran aplicabilidad.