22
                          Programación Paralela          Paradigmas de programación paralela      1 PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela  Tipos de paralelismo  Paso de mensajes  Paralelismo de datos  Memoria compartida

PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

  • Upload
    others

  • View
    12

  • Download
    1

Embed Size (px)

Citation preview

Page 1: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      1

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      2

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      3

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      4

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      5

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      6

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      7

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. 

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      8

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      9

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      10

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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      11

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      12

– 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      13

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      14

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      15

shape [1024] ringshape [1024][1024] mesh

int flag  flagint ring:a aint mesh:b b

Paralelismo de datos

Page 16: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      16

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      17

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      18

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      19

• 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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      20

• Primitivas para la creación de procesosSe  realiza  mediante  una  llamada  al  sistema  que  crea procesos  idénticos  al  proceso  padre.  Estos  procesos comparten  las  variables  declaradas  "compartidas"  por  los procesos padre así como 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. En  vez  de  crear  procesos  al  principio  de  la  ejecución, podemos  tener un solo proceso,  llamado proceso maestro. Cuando  el  maestro  necesita  realizar  una  tarea  en  paralelo, crea  un  número  predeterminado  de  procesos,  llamados procesos  esclavos.  Cuando  la  tarea  se  completa,  los procesos esclavos terminan y devuelven el control al proceso maestro.

Espacio de direcciones compartido

Page 21: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      21

• 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 na[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: PROGRAMACIÓN PARALELA Modelos de programación paralela ...dis.um.es/~domingo/apuntes/CAP/0809/paradigmas.pdf · Paradigmas de programación paralela 5 Paso de mensajes: • El programa

                            Programación Paralela         Paradigmas de programación paralela      22

• 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.• Ejemplo 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…