METODOLOGÍA DE LA PROGRAMACIÓN PARALELA...

26
METODOLOGÍA DE LA PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida

Transcript of METODOLOGÍA DE LA PROGRAMACIÓN PARALELA...

Page 1: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

METODOLOGÍA DE LA PROGRAMACIÓN PARALELA

Modelos de programación paralelaParadigmas de programación paralela

• Tipos de paralelismo

• Paso de mensajes

• Paralelismo de datos

• Memoria compartida

Page 2: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Las variaciones entre los paradigmas:

• Diferencia de esfuerzo en escribir programas. Algunos lenguajes menos esfuerzo para el programador. Otros requieren menos trabajo pero generan un código menos eficiente.

• Un determinado paradigma puede ser más eficiente que otro al programar sobre determinadas arquitecturas paralelas.

• Distintas aplicaciones tienen diferentes tipos de paralelismo.

Tipos de paralelismo

Page 3: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Explícito : – El algoritmo paralelo debe especificar

explícitamente cómo cooperan los procesadores.– La tarea del compilador es sencilla. La del

programador es bastante difícil.

• Implícito:– Un lenguaje de programación secuencial y el

compilador inserta las instrucciones necesarias para ejecutar el programa en un sistema paralelo.

– El compilador tiene que analizar y comprender las dependencias para asegurar un mapeo eficiente.

Paralelismo implícito/explícito

Page 4: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Espacio de direcciones compartido:

• El programa se ve 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

Page 5: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Paso de mensajes:

• El programa es 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

Page 6: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Los lenguajes de programación para memoria compartida o paso de mensajes son normalmente lenguajes secuenciales aumentados mediante un conjunto de llamadas de sistema especiales.

• Las 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.

• Librerías como PVM, MPI, OpenMP, con primitivas independientes del computador.

Paso de mensajes/espacio de direcciones compartido

Page 7: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Paralelismo de datos:• Aplicaciones en las que los datos están sujetos a idéntico

procesamiento. • Apropiado para máquinas SIMD.

• También se pueden ejecutar en computadores MIMD. Se requiere sincronización global después de cada instrucción ⇒ código ineficiente. Solución: relajar la ejecución síncrona de las instrucciones ⇒ Modelo SPMD: cada procesador ejecuta el mismo programa asíncronamente, ES EL QUE USAREMOS.

• 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. El código generado por estas construcciones no es tan eficiente como el obtenido usando primitivas de bajo nivel.

Paralelismo de datos/de control

Page 8: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

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 MIMD ya que requiere múltiples cadenas de instrucciones.

Paralelismo de datos/de control

Page 9: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Paso de mensajes

Extensiones básicas: Son extensiones en los lenguajes secuenciales para soportar el paso de mensajes.

• Dos primitivas básicas de comunicación: SEND y RECEIVE. La forma general de send es:

SEND (message, messagesize, target, type, flag)– message contiene los datos que se envían, – messagesize indica el tamaño en bytes, – target es la etiqueta del procesador o procesadores destino, – type es una constante con la que se distingue entre varios

tipos de mensajes, – flag indica si la operación del SEND es bloqueante o no-

bloqueante.

Page 10: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Paso de mensajesLa primitiva RECEIVE lee un mensaje del buffer de comunicación en la memoria.

RECEIVE (message, messagesize, source, type, flag)– messsage indica el lugar donde se almacenan los datos, – messagesize indica el número máximo de bytes a poner en mensaje, – source indica la etiqueta del procesador cuyo mensaje se va a leer, – type especifica el tipo de mensaje que se va a leer. Puede haber más de un mensaje en el buffer de comunicación de los procesadores fuente, – flag especifica si la operación de recibir es bloqueante o no bloqueante.

Page 11: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Lenguajes de paralelismo de datos: facilitar al programador la tarea de expresar el paralelismo disponible en un programa de manera independiente de la arquitectura.

• Características:– Se genera una sola cadena de instrucciones.– Ejecución síncrona de instrucciones. Más fácil escribir y depurar

programas de paralelismo de datos puesto que los bloqueos son imposibles.

– El programador especifica el paralelismo en el código.– Asocia un procesador virtual con una unidad fundamental de

paralelismo. El programador expresa la computación en términos de las operaciones realizadas por los procesadores virtuales.

– Permite que cada procesador tenga acceso a las posiciones de memoria de otros procesadores.

Paralelismo de datos

Page 12: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

– Los compiladores para los lenguajes de paralelismo de datos deben mapear los procesadores virtuales en procesadores físicos, generar código para comunicar datos y esforzarse para la ejecución síncrona de instrucciones.

– Los procesadores virtuales son emulados por procesadores físicos. Si el número de procesadores virtuales es mayor que el número de procesadores físicos, cada procesador físico emula varios procesadores virtuales.

– Algunos lenguajes de paralelismo de datos contienen primitivas que permiten al programador especificar el mapeo deseado de los procesadores virtuales en los físicos.

Paralelismo de datos

Page 13: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Ejemplo: C*

Lenguaje de programación para paralelismo de datos. Extensión del lenguaje C, diseñado por Thinking Machines Corporation para el computador CM-2.

Incluye un método para describir el tamaño y la forma de los datos paralelos y crear variables paralelas.

Incluye operadores y expresiones para los datos paralelos.

Paralelismo de datos

Page 14: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Variables:

– variables escalares: idéntica a una variable ordinaria. Se asignan en el host.

– variables paralelas: Se asignan en todos los nodos. Tienen tantos elementos como número de procesadores. Una variable paralela tiene una "forma" además de un tipo. Una "forma" es una plantilla para los datos paralelos, o sea una forma de configurar los datos lógicamente. Define cuántos elementos paralelos existen y cómo están organizados. Una "forma" tiene un número de dimensiones, rango, con un número de procesadores o posiciones en cada dimensión.

Paralelismo de datos

Page 15: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

shape [1024] ring

shape [1024][1024] mesh

int flag flag

int ring:a a

int mesh:b b

Paralelismo de datos

Page 16: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• C* no permite que el programador especifique explícitamente el mapeo virtual a físico. C* mapea los procesadores virtuales en procesadores físicos de forma que los procesadores virtuales vecinos se mapean en procesadores físicos vecinos.

• C* permite especificar a través de qué dimensiones de la "forma" se hacen comunicaciones más a menudo. El compilador usa esta información para reducir costes de comunicación.

• Después de que se ha especificado una forma, se pueden declarar variables paralelas de esa "forma". Las variables paralelas tienen un tipo, una clase de almacenamiento, y una forma.

Paralelismo de datos

Page 17: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Operaciones paralelas – Si los operandos de una operación son escalares, el código C* es

igual que el código C y la operación se realiza en el host.

– Si los operandos son variables paralelas,

x+=y donde x e y son variables paralelas. Esta asignación añade el valor de y en cada posición de la "forma" al valor de x en la posición correspondiente de la forma. Todas las sumas tienen lugar en paralelo. x e y deben ser de la misma "forma".

x=a, donde a es una variable escalar, el valor de a se almacena en cada posición de x. Esto es similar a una operación de broadcast. a =[4]x es válida y asigna a a el valor de x de la cuarta posición de la forma.

a+=x suma todos los valores de x y los almacena en a.

Paralelismo de datos

Page 18: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Comunicación. C* soporta dos métodos de comunicación interprocesador:

– comunicación en red: las variables paralelas del mismo tipo pueden comunicarse en patrones regulares. Es bastante eficiente.

– comunicación general: el valor de cualquier elemento de una variable paralela se puede enviar a cualquier otro elemento aunque las variables paralelas no sean de la mismo "forma".

Paralelismo de datos

Page 19: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Primitivas para asignar variables compartidas.Existen dos tipos de variables: compartidas (shared) y locales (private)

• Primitivas para la exclusión mutua y sincronización.Una sección crítica contiene código que sólo puede ser ejecutado por un procesador en un momento determinado. Los lenguajes proporcionan llaves (locks) para ayudar al programador a cumplir la exclusión mutua en la ejecución de secciones críticas.Las primitivas de sincronización de barreras se usan cuando los procesos necesitan sincronizarse. Cada proceso espera en la barrera a los otros procesos, y después de la sincronización todos los procesos continúan con su ejecución.

Espacio de direcciones compartido

Page 20: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Primitivas para la creación de procesosMediante una llamada al sistema que crea procesos idénticos al padre.

Estos procesos comparten las variables declaradas "compartidas" por los procesos padre y las llaves declaradas e inicializadas por los procesos padre.

En la mayoría de computadores de espacio de direcciones compartido, esta operación se llama fork. Cuando todos los subprocesos terminan, se mezclan usando otra primitiva, normalmente llamada join. Al principio de la ejecución, podemos tener un solo proceso (proceso maestro).

Cuando el maestro necesita hacer una tarea en paralelo, crea procesos esclavos.

Cuando la tarea se completa, los esclavos terminan y devuelven el control al maestro.

Espacio de direcciones compartido

Page 21: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Programa secuencial. El compilador se encarga de paralelizarlo.

• Normalmente en sistemas de memoria compartida.

• Paralelizan bucles: dividen el trabajo en los bucles entre los distintos procesadores

• Si puede haber dependencia de datos no paraleliza:para i=1 to n

a[i]=b[i]+a[i-1]

finpara

• Se puede forzar la paralelización con opciones de compilación, o con directivas (OpenMP).

• Generan ficheros con información de bucles paralelizados y no paralelizados, y el motivo.

Compiladores paralelizantes

Page 22: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Primitivas que debería contener un lenguaje paralelo:– Paralelización de bucles,– Pipeline,– Crear grupo de procesos, …

• Asociar a cada constructor (esqueleto) una función de coste.• Mapeo de los procesos generados en función de la función

de coste.• Ejemplos Clik, UPC, Co-Array Fortran, mpC

Lenguajes paralelos de alto nivel

Librerías para campos específicos de trabajo

• Desarrollar librerías para campos donde más se usa la computación paralela, con capacidades de autooptimización: el usuario llama a la rutina y esta decide cuántos y qué procesadores usar, la distribución de datos, …

• Álgebra lineal, transformada rápida de Fourier, optimización…

Page 23: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

• Computador con p procesadores, numerados de 0 a p-1

– cada uno con su índice de referencia

– comparten un espacio único de direcciones de memoria

– cada uno puede acceder en un tiempo constante a cualquier posición

de memoria, comparten información a través de la memoria

– comparten una única señal de reloj que permite ejecutar instrucciones

de forma síncrona

– Resolución de conflictos de acceso concurrente a una posición de

memoria:

• EREW (Exclusive Read-Exclusive Write)

• CREW

• ERCW

• CRCW Diferentes posibilidades para resolver el problema de

escritura concurrente

Modelo PRAM

Page 24: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

Modelo PRAM: Multiplicación matriz-vector

A b x=

P1calculado por

P2calculado por

P3calculado por

P0calculado por

= xi = A(i)Tb

=

Page 25: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

En paralelo en cada Pk , k de 0 a p-1:

Si k=0

Para i=0 hasta p-1

m[i]=m

n[i]=n-1

t[k]=m/p

Para j=0 hasta n-1B[j,i]=b[j]

Para i[k]=0 hasta t[k]-1

f[k]=i[k]+k*t[k]

x[f[k]]=0

Para j[k]=0 hasta n[k]

x[f[k]]=x[f[k]]+A[f[k],j[k]]*B[j[k],k]

PRAM EREW: Multiplicación matriz-vectorm

n

p

B

n

m

n

b

m

n

b

m

n

b

...

...

...

tnm/p m/p...

necesidad de crear vectores auxiliares,

para los índices, los tamaños de los datos,

el vector multiplicador..., para evitar

referencias simultáneas

Coste:

3nm/p+4m/p+2np+3p+2

Page 26: METODOLOGÍA DE LA PROGRAMACIÓN PARALELA …dis.um.es/~domingo/apuntes/AlgProPar/1213/paradigmas.pdf · explícitamente cómo cooperan los procesadores. ... – Si los operandos

En paralelo en cada Pk , k de 0 a p-1:

t=m/p

Para i=0 hasta t-1

f[k]=i+k*t

x[f[k]]=0

Para j=0 hasta n-1

x[f[k]]=x[f[k]]+A[f[k],j]*b[j]

PRAM CRCW: Multiplicación matriz-vector

pueden ser índices distintos,

pero cada uno va por una fila distinta

Coste:

3nm/p+4m/p+1

¿Cómo sería en memoria distribuida?