En este capítulo realizaremos un recorrido por el estado del arte de la programación paralela. Se presentarán los lenguajes que han sido el estándar de la programación paralela en el pasado y que han servido de base para los lenguajes actuales [7], se estudiarán éstos y cómo han evolucionado y se mostrará el estado de las investigaciones actuales para desarrollar los lenguajes de programación paralela que establecerán el estándar en los próximos años, muchas de ellas realizadas bajo el ámbito del programa HPCS [104].El conjunto de lenguajes, librerías y herramientas paralelas es lo suficientemente amplio como para que haya sido necesario acotarlo en esta memoria, presentando en este capítulo sólo aquellos que poseen una mayor relevancia. Además de éstos, existe un grupo de lenguajes que, a pesar de no haber tenido una especial trascendencia a nivel global, sí han repercutido e influenciado directamente nuestro trabajo. Algunos de ellos serán mencionados en este capítulo, mientras que otros han sido omitidos por cuestiones de espacio ([80, 78, 136, 14, 85).Para no extender en exceso este capítulo, hemos restringido a sólo unos párrafos la información que se presenta en cada caso. Para algunos de los lenguajes con los que hemos trabajado directamente también hemosañadido observaciones y comentarios obtenidos de la propia experiencia. Finalmente, hemos incluido fragmentos de códigos con el objetivo de ilustrar las explicaciones con ejemplos de programas codificados en cada lenguaje. El lector interesado en ampliar conocimientos sobre alguno de los lenguajes que aquí se resumen puede consultar las correspondientes referencias de la bibliografía.El orden que hemos seguido para presentar los lenguajes ha sido una combinación entre un orden cronológico y de relevancia en nuestro trabajo, agrupándolos por características comunes. De este modo, los dos primeros lenguajes que se tratarán serán OpenMP y MPI debido a su impacto en nuestro desarrollo. Seguidamente se estudiarán las librerías de comunicaciones (dentro de la que se encuentra MPI) y los lenguajes PGAS. Finalmente, se presentarán una serie de lenguajes que no pertenecen a la clasificación anterior, para terminar con varios de los trabajos más recientes, enmarcados en el programa HPCS.1.2. OpenMPOpenMP (Open Multi-Processing) [42, 28, 17] es una API (Application Program Interface) que nace del trabajo conjunto de importantes fabricantes de hardware y software, ofreciendo al usuario un modelo de programación de paralelismo explícito. Esta API está compuesta por un conjunto de directivas de compilador que el usuario utiliza para especificar qué regiones de código van a ser paralelizadas, y una librería de rutinas. El usuario también cuenta con un limitado número de variables de entorno que permiten especificar, entre otros aspectos, las condiciones que definirán la ejecución de la aplicación paralela. OpenMP se especifica para C/C++ y Fortran.La implementación de OpenMP utiliza multithreading para obtener el paralelismo, mediante un modelo fork-join. De este modo, al encontrarse una directiva paralela que así lo indique, el thread maestro se divide en un número determinado de threads esclavos que se ejecutan concurrentemente y las tareas se distribuyen entre ellos.
Index Terms
- Extension del modelo de OpenMP a memoria distribuida