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