? Como sabemos, los sistemas paralelos MIMD presentan dos arquitecturas diferenciadas: memoria compartida y memoria distribuida.
? El modelo de memoria utilizado hace que la programación de aplicaciones paralelas para cada caso sea esencialmente diferente.
Programación aplicaciones paralelas
? Para los sistemas de memoria distribuida (MPP), el estándar de programación, mediante paso de mensajes, es MPI.
? Para los sistemas de memoria compartida tipo SMP, la herramienta más utilizada es OpenMP.
? Otras opciones:
UPC (Unified Parallel C)
shrmem (Cray)
Tarjetas gráficas: CUDA / OpenCL
Programación aplicaciones paralelas
Earth Simulator
Programación aplicaciones paralelas
OpenMP
una pequeña introducción
? OpenMP es el estándar actual para programar aplicaciones paralelas en sistemas de memoria compartida.
Introducción
? No se trata de un nuevo lenguaje de programación, sino de un API (application programming interface) formado por:
? directivas para el compilador
(C) #pragma omp < directiva>
? unas pocas funciones de biblioteca
? algunas variables de entorno
? El modelo de programación paralela que aplica OpenMP es Fork – Join.
En un determinado momento, el thread master genera P threads que se ejecutan en paralelo.
(Gp:) thread master
FORK
JOIN
(Gp:) región paralela
(Gp:) thread master
Introducción
? Todos los threads ejecutan la misma copia del código (SPMD). A cada thread se le asigna un identificador (tid).
? Para diferenciar las tareas ejecutadas por cada thread:
? if (tid == 0) then … else …
? constructores específicos de reparto de tareas (work sharing).
Introducción
? En resumen, partiendo de un programa serie, para obtener un programa paralelo OpenMP hay que añadir:
? directivas que especifican una región paralela (código replicado), reparto de tareas (específicas para cada thread), o sincronización entre threads.
? funciones de biblioteca (include < omp.h>): para gestionar o sincronizar los threads..
Introducción
Página siguiente |