PROGRAMACIÓN PARALELA LENGUAJES Y MODELOS DE PROGRAMACIÓN PARALELA Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida Threads OpenMP MPI
Las variaciones entre los paradigmas están motivados por varios factores: ? Diferencia de esfuerzo invertido en escribir programas paralelos. Algunos lenguajes requieren menos esfuerzo para el programador, mientras que otros requieren menos trabajo pero generan un código menos eficiente. ? Un determinado paradigma de programación puede ser más eficiente que otros al programar sobre determinadas arquitecturas paralelas. ? Distintas aplicaciones tienen diferentes tipos de paralelismo y por tanto se han desarrollado diferentes lenguajes de programación para explotarlos. Tipos de paralelismo
Explícito : El algoritmo paralelo debe especificar explícitamente cómo cooperan los procesadores para resolver un problema específico. La tarea del compilador es sencilla, en cambio la del programador es bastante difícil. Implícito: Se usa un lenguaje de programación secuencial y el compilador inserta las instrucciones necesarias para ejecutar el programa en un computador paralelo. El compilador tiene que analizar y comprender las dependencias para asegurar un mapeo eficiente en el computador paralelo.
Paralelismo implícito/explícito
Espacio de direcciones compartido: Los programadores ven el programa como una colección de procesos accediendo a una zona central de variables compartidas. Más de un proceso podría acceder a la misma zona compartida en el mismo instante produciendo resultados impredecibles. Los lenguajes proporcionan primitivas para resolver estos problemas de exclusión mutua. Paso de mensajes/espacio de direcciones compartido
Paso de mensajes: Los programadores ven su programa como una colección de procesos con variables locales privadas y la posibilidad de enviar y recibir datos mediante paso de mensajes. Los computadores de espacio de direcciones compartido también se pueden programar usando el paradigma de paso de mensajes. Paso de mensajes/espacio de direcciones compartido
Muchos lenguajes de programación para memoria compartida o paso de mensajes son básicamente lenguajes secuenciales aumentados mediante un conjunto de llamadas de sistema especiales. Estas llamadas producen primitivas de bajo nivel para el paso de mensajes, sincronización de procesos, exclusión mutua, etc. El problema de estos lenguajes es la portabilidad entre arquitecturas. Recientemente han aparecido librerías como PVM, MPI, OpenMP, con primitivas independientes del computador. Paso de mensajes/espacio de direcciones compartido
Paralelismo de datos: Aplicaciones en las que los datos están sujetos a idéntico procesamiento. Es más apropiado para ejecutar en máquinas SIMD. También se pueden ejecutar en computadores MIMD. Se requiere sincronización global después de cada instrucción, lo que resulta en un código ineficiente. Solución: relajar la ejecución síncrona de las instrucciones. Modelo SPMD. Cada procesador ejecuta el mismo programa asíncronamente. Los lenguajes de paralelismo de datos ofrecen construcciones de alto nivel para compartir información y manejar concurrencia. Programas más fáciles de escribir y comprender. Aunque el código generado por estas construcciones no es tan eficiente como el obtenido usando primitivas de bajo nivel. Paralelismo de datos/de control
Paralelismo de control: Ejecución simultánea de cadenas de instrucciones diferentes. Las instrucciones se pueden aplicar sobre la misma cadena de datos aunque normalmente se aplican a cadenas de datos diferentes. Adecuados para mapear en MIMD ya que el paralelismo de control requiere múltiples cadenas de instrucciones. Paralelismo de datos/de control
Página siguiente |