Vous êtes sur la page 1sur 22

PROGRAMACIN PARALELA

Modelos de programacin paralela


Paradigmas de programacin
paralela
Tipos de paralelismo
Paso de mensajes
Paralelismo de datos

Memoria compartida
Programacin Paralela
Paradigmas de programacin paralela

Tipos de paralelismo
Las variaciones entre los paradigmas estn motivadas por
varios factores:
Diferencia de esfuerzo invertido en escribir programas
paralelos. Algunos lenguajes requieren menos esfuerzo
para el programador, mientras que otros requieren menos
trabajo pero generan un cdigo menos eficiente.
Un determinado paradigma de programacin puede ser
ms eficiente que otros al programar sobre determinadas
arquitecturas paralelas.
Distintas aplicaciones tienen diferentes tipos de
paralelismo y por tanto se han desarrollado diferentes
lenguajes de programacin para explotarlos.
Programacin Paralela
Paradigmas de programacin paralela

Paralelismo implcito/explcito
Explcito :
El
algoritmo
paralelo
debe
especificar
explcitamente cmo cooperan los procesadores
para resolver un problema especfico.
La tarea del compilador es sencilla, en cambio la
del programador es bastante difcil.
Implcito:
Se usa un lenguaje de programacin secuencial y
el compilador inserta las instrucciones necesarias
para ejecutar el programa en un computador
paralelo.
El compilador tiene que analizar y comprender las
dependencias para asegurar un mapeo eficiente
en el computador paralelo.
Programacin Paralela
Paradigmas de programacin paralela

Paso de mensajes/espacio de direcciones


compartido
Espacio de direcciones compartido:
Los programadores ven el programa como una
coleccin de procesos accediendo a una zona central
de variables compartidas.
Ms de un proceso podra acceder a la misma zona
compartida en el mismo instante produciendo
resultados impredecibles. Los lenguajes proporcionan
primitivas para resolver estos problemas de exclusin
mutua.

Programacin Paralela
Paradigmas de programacin paralela

Paso de mensajes/espacio de direcciones


compartido
Paso de mensajes:
Los programadores ven su programa como una
coleccin 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 tambin se pueden programar usando el
paradigma de paso de mensajes.

Programacin Paralela
Paradigmas de programacin paralela

Paso de mensajes/espacio de direcciones


compartido
Muchos lenguajes de programacin para memoria
compartida o paso de mensajes son bsicamente
lenguajes secuenciales aumentados mediante un
conjunto de llamadas de sistema especiales. Estas
llamadas producen primitivas de bajo nivel para el paso
de mensajes, sincronizacin de procesos, exclusin
mutua, etc.
El problema de estos lenguajes es la portabilidad entre
arquitecturas. Recientemente han aparecido libreras
como
PVM,
MPI,
OpenMP,
con
primitivas
independientes del computador.
Programacin Paralela
Paradigmas de programacin paralela

Paralelismo de datos/de control


Paralelismo de datos:
Aplicaciones en las que los datos estn sujetos a idntico
procesamiento.
Es ms apropiado para ejecutar en mquinas SIMD.
Tambin se pueden ejecutar en computadores MIMD. Se requiere
sincronizacin global despus de cada instruccin, lo que resulta en
un cdigo ineficiente. Solucin: relajar la ejecucin sncrona de las
instrucciones. Modelo SPMD. Cada procesador ejecuta el mismo
programa asncronamente.
Los lenguajes de paralelismo de datos ofrecen construcciones de
alto nivel para compartir informacin y manejar concurrencia.
Programas ms fciles de escribir y comprender. Aunque el cdigo
generado por estas construcciones no es tan eficiente como el
obtenido usando primitivas de bajo nivel.
Programacin Paralela
Paradigmas de programacin paralela

Paralelismo de datos/de control

Paralelismo de control:
Ejecucin
simultnea
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 mapear en MIMD ya que el
paralelismo de control requiere mltiples
cadenas de instrucciones.

Programacin Paralela
Paradigmas de programacin paralela

Paso de mensajes
Extensiones bsicas: Son extensiones en los lenguajes secuenciales
para soportar el paso de mensajes.
Existen dos primitivas bsicas de comunicacin: SEND y
RECEIVE.
La forma general de send es:
SEND (message, messagesize, target, type, flag)
message contiene los datos que se envan,
messagesize indica el tamao 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, y
flag indica si la operacin del SEND es bloqueante o nobloqueante.
Programacin Paralela
Paradigmas de programacin paralela

Paso de mensajes
La primitiva RECEIVE lee un mensaje del buffer de comunicacin
en la memoria.
Su forma general es:
RECEIVE (message, messagesize, source, type, flag)
messsage indica el lugar donde se almacenan los datos,
messagesize indica el nmero mximo 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 ms de un mensaje en el buffer de comunicacin de los
procesadores fuente. El parmetro type selecciona un
determinado mensaje para leer,
flag especifica si la operacin de recibir es bloqueante o no
bloqueante.
Programacin Paralela
Paradigmas de programacin paralela

10

Paralelismo de datos
Lenguajes de paralelismo de datos: facilitar al programador
la tarea de expresar el paralelismo disponible en un
programa de manera independiente de la arquitectura.
Caractersticas:
Se genera una sola cadena de instrucciones.
Ejecucin sncrona de instrucciones. Ms fcil escribir y depurar
programas de paralelismo de datos puesto que los bloqueos son
imposibles.
El programador especifica el paralelismo en el cdigo.
Asocia un procesador virtual con una unidad fundamental de
paralelismo. El programador expresa la computacin en trminos de
las operaciones realizadas por los procesadores virtuales.
Permite que cada procesador tenga acceso a las posiciones de
memoria de otros procesadores.
Programacin Paralela
Paradigmas de programacin paralela

11

Paralelismo de datos
Los compiladores para los lenguajes de paralelismo de datos deben
mapear los procesadores virtuales en procesadores fsicos, generar
cdigo para comunicar datos y esforzarse para la ejecucin sncrona
de instrucciones.
Los procesadores virtuales son emulados por procesadores fsicos.
Si el nmero de procesadores virtuales es mayor que el nmero de
procesadores fsicos, cada procesador fsico 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 fsicos.

Programacin Paralela
Paradigmas de programacin paralela

12

Paralelismo de datos
Ejemplo: C*
Lenguaje de programacin para paralelismo de datos.
Extensin del lenguaje C, diseado por Thinking Machines
Corporation para el computador CM-2.
Incluye un mtodo para describir el tamao y la forma de los
datos paralelos y crear variables paralelas. Incluye
operadores y expresiones para los datos paralelos.

Programacin Paralela
Paradigmas de programacin paralela

13

Paralelismo de datos
Variables:
variables escalares: idntica a una variable ordinaria. Se asignan
en el host.

variables paralelas:
Se asignan en todos los nodos.
Tienen tantos elementos como nmero de procesadores.
Una variable paralela tiene una "forma" adems de un tipo.
Una "forma" es una plantilla para los datos paralelos, o sea una
forma de configurar los datos lgicamente.
Define cuntos elementos paralelos existen y cmo estn
organizados.
Una "forma" tiene un nmero de dimensiones, rango, con un
nmero de procesadores o posiciones en cada dimensin.
Programacin Paralela
Paradigmas de programacin paralela

14

Paralelismo de datos
shape [1024] ring
shape [1024][1024] mesh
int flag
int ring:a
int mesh:b

flag
a
b

Programacin Paralela
Paradigmas de programacin paralela

15

Paralelismo de datos
C* no permite que el programador especifique
explcitamente el mapeo virtual a fsico. C* mapea los
procesadores virtuales en procesadores fsicos de
forma que los procesadores virtuales vecinos se
mapean en procesadores fsicos vecinos.
C* permite especificar a travs de qu dimensiones de
la "forma" se hacen comunicaciones ms a menudo. El
compilador usa esta informacin para reducir costos de
comunicacin.
Despus 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.
Programacin Paralela
Paradigmas de programacin paralela

16

Paralelismo de datos
Operaciones paralelas
Si los operandos de una operacin son escalares, el cdigo C* es
igual que el cdigo C y la operacin se realiza en el host.
Si los operandos son variables paralelas,
x+=y donde x e y son variables paralelas. Esta asignacin aade
el valor de y en cada posicin de la "forma" al valor de x en la
posicin 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 posicin de x. Esto es similar a una operacin de broadcast.
a =[4]x es vlida y asigna a a el valor de x de la cuarta posicin de
la forma.
a+=x suma todos los valores de x y los almacena en a.

Programacin Paralela
Paradigmas de programacin paralela

17

Paralelismo de datos
Comunicacin. C*
soporta
comunicacin interprocesador:

dos

mtodos

de

comunicacin en red: las variables paralelas del


mismo tipo pueden comunicarse en patrones
regulares. Es bastante eficiente.
comunicacin 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".

Programacin Paralela
Paradigmas de programacin paralela

18

Espacio de direcciones compartido

Primitivas para asignar variables compartidas.


Existen dos tipos de variables: compartidas (shared) y
locales (private)
Primitivas para la exclusin mutua y sincronizacin.
Una seccin crtica contiene cdigo que slo puede ser
ejecutado por un procesador en un momento determinado.
Los lenguajes proporcionan llaves (locks) para ayudar al
programador a cumplir la exclusin mutua en la ejecucin
de secciones crticas.
Las primitivas de sincronizacin de barreras (barrier
synchronization) se usan cuando los procesos necesitan
sincronizarse antes de que acabe la ejecucin. Cada
proceso espera en la barrera a los otros procesos, y
despus de la sincronizacin todos los procesos continan
con su ejecucin.
Programacin Paralela
Paradigmas de programacin paralela

19

Espacio de direcciones compartido

Primitivas para la creacin de procesos


Se realiza mediante una llamada al sistema que crea
procesos idnticos 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 mayora de computadores de
espacio de direcciones compartido, esta operacin 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 ejecucin,
podemos tener un solo proceso, llamado proceso maestro.
Cuando el maestro necesita realizar una tarea en paralelo,
crea un nmero predeterminado de procesos, llamados
procesos esclavos. Cuando la tarea se completa, los
procesos esclavos terminan y devuelven el control al proceso
maestro.
Programacin Paralela
Paradigmas de programacin paralela

20

Compiladores paralelizantes
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 paralelizacin con opciones de


compilacin, o con directivas (OpenMP).
Generan ficheros con informacin de bucles paralelizados y
no paralelizados, y el motivo.
Programacin Paralela
Paradigmas de programacin paralela

21

Lenguajes paralelos de alto nivel

Primitivas que debera contener un lenguaje paralelo:


Paralelizacin de bucles,
Pipeline,
Crear grupo de procesos,

Asociar a cada constructor (esqueleto) una funcin de coste.


Mapeo de los procesos generados en funcin de la funcin
de coste.
Ejemplo mpC

Libreras para campos especficos de


trabajo

Desarrollar libreras para campos donde ms se usa la


computacin paralela, con capacidades de autooptimizacin:
el usuario llama a la rutina y esta decide cuntos y qu
procesadores usar, la distribucin de datos,
lgebra lineal, transformada rpida de Fourier,
Programacin Paralela
Paradigmas de programacin paralela

22

Vous aimerez peut-être aussi