? 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 |