? Alternativas: • usar un lenguaje paralelo nuevo, o modificar la sintaxis de uno secuencial (HPF, UPC… / Occam, Fortran M…). • usar un lenguaje secuencial junto con directivas al compilador para especificar el paralelismo. • usar un lenguaje secuencial junto con rutinas de librería.
? En el caso de memoria compartida, tenemos más opciones: > trabajar con procesos (UNIX) > usar threads: Pthreads (POSIX), Java, OpenMP…
(Gp:) heap (Gp:) pila (Gp:) IR (Gp:) proceso j (Gp:) rutinas interrup. (Gp:) código (Gp:) ficheros
? procesos concurrentes: Fork / Join ? gran overhead, son muy “caros”
(Gp:) heap (Gp:) rutinas interrup. (Gp:) código (Gp:) ficheros
(Gp:) pila (Gp:) IR (Gp:) thread 1
(Gp:) pila (Gp:) IR (Gp:) thread 2
? los threads son más “ligeros” ? la sincronización (variables compartidas) es sencilla ? habitual en el S.O. (solaris, windows XP…)
? Para los sistemas de memoria distribuida, el estándar actual de programación, mediante paso de mensajes, es MPI. ? Para los sistemas de memoria compartida, de tipo SMP, la herramienta más extendida es OpenMP. ? En ambos casos hay más opciones, y en una máquina más general utilizaremos probablemente una mezcla de ambos.
? Qué esperamos de una “herramienta” para programar aplicaciones en máquinas de memoria distribuida (MPI): • un mecanismo de identificación de los procesos. • una librería de funciones de comunicación punto a punto: send, receive… • funciones de comunicación global: broadcast,, scatter, reduce… • alguna función para sincronizar procesos.
? Qué esperamos de una “herramienta” para programar aplicaciones en máquinas de memoria compartida: • un mecanismo de identificación de los threads. • un método para declarar las variables como privadas (private) o compartidas (shared). • un mecanismo para poder definir “regiones paralelas”, bien sea a nivel de función o a nivel de iteración de bucle. • facilidades para sincronizar los threads.
? Qué no esperamos de una “herramienta” para programar aplicaciones paralelas: • un analizador de dependencias entre tareas (queda en manos del programador).
Introducción ? OpenMP es el estándar actual para programar aplicaciones paralelas en sistemas de memoria compartida tipo SMP.
Entre otras características, es portable, permite paralelismo “incremental”, y es independiente del hardware.
Participan en su desarrollo los fabricantes más importantes: HP, IBM, SUN, SG…
Página siguiente |