Sie sind auf Seite 1von 32

A diferencia a una programación secuencial, la

programación paralela genera los siguientes


problemas:
 División en unidades de cómputo independientes
(tareas)
 Agrupación de tareas o carga de trabajo (código, datos)
 Asignación a procesadores
 Sincronización y comunicación
Existen herramientas y métodos que facilitan el
desarrollo de programas paralelos eficientes, legibles
o mantenibles.
El mas sencillo es el uso de compiladores que
extraen el paralelismo automáticamente. El
problema esta en que estos compiladores no
Generan códigos eficientes para cualquier programa.
Los métodos que conducen de forma sistemática a
una versión paralela resultan ser la mejor opción.
Facetas de estudio dentro de la programación paralela
(1) Punto de partida
(2) Modos de programación paralélela
(3) Herramientas para obtener programas paralelos
(4) Alternativas de comunicación
(5) Estilos de programación paralela
(6) Estructuras de programas paralelos
(7) Alternativas para crear y terminar procesos hebras
(8) Procesos de paralización
opción1 es utilizar como punto de partida un código
secuencial que resuelva el problema, y sobre este código
de alto nivel buscar la paralelizacion.
La versión paralela va a depender de la descripción del
problema que se ha utilizado en la versión secuencial de
partida
Una ventaja de esta opción es que se puede saber el
tiempo de ejecución real de las diferentes funciones o
tareas de que consta la aplicación.
Lo que permite una distribución equilibrada de la carga
de trabajo entre procesadores. además permite encontrar
fácilmente las partes de la aplicación a la que se dedica
mas esfuerzo de paralelización, que suponen mayor
tiempo.
Otra opción es partir de la definición de la aplicación.
En la que habría que buscar una descripción del
problema que admita paralelización
Adicionalmente nos podemos apoyar en programas
paralelos para aprovechar las caracteristicas de la
arquitectura y la biblioteca de funciones paralelas.
 Hay dos modos de programación
 SPMD (single program, multiple data) o conocido como
paralelismo de datos.
 MPMD (multiple program, multple data) o conocido como
paralelismo de tareas o funciones.
SPMD MPMD
Func1(){
}
Func2(){
}
For(i=ithread;i<N;i=i+nthread){
Codigo para i
}
Func3(){
}
Main()
Switch(iproc){
Case0;Func1();break
Case1;Func2();break
Case2;Func3();breac
Las herramientas para obtener programas
paralelos deberían permitir la realización de las
siguientes tareas:
 Crear y terminar procesos
 Localizar paralelismo
 Distribuir la carga de trabajo entre procesos
 Crear y terminar procesos
 Comunicación
 Sincronización entre procesos
Alternativas para obtener un programa paralelo

-Biblioteca de funciones para programación paralela


-Lenguajes paralelos y directivas del compilador
-Compiladores paralelos
BIBLIOTECAS DE FUNCIONES PARA PROGRAMACION
PARALELA
Ventajas:
 Los programadores están familiarizados con los
lenguajes secuenciales, no tienen que aprenderlos, los
usan en la programación de sus aplicaciones
secuenciales.
 Las bibliotecas están disponibles para todos los sistemas
paralelos (multiprocesadores, multicomputadores,
incluidos cluster)
 Las bibliotecas están mas cercanas al hardware y dan al
programador un control a más bajo nivel.
 Se pueden usar a la vez bibliotecas para programar con
hebras y bibliotecas para programar con procesos

Los ejemplos de bibliotecas son Pthread, MPI, PVM Y OpenMP


OpenMP posee, además de bibliotecas, directivas.
LENGUAJES PARALELOS Y DIRECTIVAS DEL
COMPILADOR
Ventaja:
 Construcciones propias del lenguaje, (FORALL) en HPF
y par en OCCAM para paralelismo de tareas
 Directivas del compilador, por ejemplo, en HPF se usa
INDEPENDENT para paralelizar bubles, PROCESSORS
para especificar el tamaño y la forma de la maquina, o
DISTRIBUTE para especificar como los datos se asignan
a la maquina virtual especificada por las directivas
PROCESSORS.
 Funciones de biblioteca, que implementan en paralelo
algunas operaciones usuales.
Ejemplos de sentencias en lenguajes paralelos para
distribuir tareas entre procesos y hebras

Func1(){
}
Func2(){
}
Forall(i=ithread;i<N;i=i+nthread){
Codigo para i
}
Func3(){
}
Main()
par(iproc){
Case0;Func1();break
Case1;Func2();break
Case2;Func3();breac

Crear y terminar procesos


COMPILADORES PARALELOS

Se pretende que un compilador paralelo, a partir de una


versión secuencial, extraiga automáticamente
paralelismo a nivel de bucle (paralelismo de datos)
y de función (paralelismo de tareas). Para ello se
realizan análisis de dependencias entre bloques de
codigo: Entre iteraciones de un ciclo o Entre funciones

B1 B2
La dependencias que detecta el análisis entre estos dos
bloques son:
 Dependencias RAW: ocurre si el bloque B1 produce un
dato que consume B2.
 Dependencias WAW: ocurre si B1 escribe en una
posición de memoria en la que también escribe B2.
 Dependencias WAR: ocurre si B1 lee una posición de
memoria que modifica B2.
Las dependencias WAW y WAR son evitables cambiando la
asignación de memoria; también se pueden eliminar asi
algunas RAW.
Todos estos compiladores están limitados a aplicaciones
que exhiben un paralelismo regular, como los cálculos a
nivel de bucle.
No sólo los encontramos en computadores paralelos de
altas prestaciones, también los podemos encontrar en el
nivel de PC y estaciones como los compiladores intel.
La programación paralelo puede ofrecer al
programador, además de la comunicación entre dos
procesos, uno productor y otro consumidor,
comunicaciones en las que intervienen múltiples
procesos.
 Esto se usa para comunicar a los procesos que
forman parte del grupo que esta colaborando en la
ejecución de un código.
 En algunos casos no se usan para comunicar
explícitamente datos, sino para sincronizar entre si a
componentes del grupo.
Hay patrones de comunicación que se repiten
en diferentes algoritmos paralelos.asi hay
algoritmos en los que:
 Se reordenan datos entre procesos, siguiendo
patrones reconocibles (permutaciones) como:
rotación, intercambio y baraje.
 Se difunden datos
 Se reduce un conjunto de datos a un único dato
mediante una operación: para sumar los elementos
de una lista; calculo del máximo o del mínimo.
 Se realizan múltiples reducciones en paralelo con el
mismo conjunto de datos, cada uno con diferente
numero de elementos.
 Se sincronizan múltiples procesos en un punto.
La siguiente figura se presenta una
clasificación de las funciones colectivas en
cinco grupos:
 Comunicación múltiple uno a uno: hay
componentes del grupo que envían un único
mensaje y componentes que reciben un único
mensaje.
 Comunicación uno a todos: envía y todos los
procesos reciben
Difusión: los procesos reciben el mismo mensaje
Dispersión (scatter): cada proceso receptor recibe
un mensaje diferente
 Comunicación todos a uno: todos los procesos en
el grupo envían un mensaje a un único proceso.
 Reducción: mensajes enviados se combinan en un
solo mensaje mediante un operador
 Acumulación (gather): mensajes se reciben de
forma concatenada en el receptor

Reduccion acumulacion
 Comunicación todos a todos: todos los procesos ejecutan
una comunicación uno a todos, pero cada proceso recibe n
mensajes, cada uno de un proceso diferente.
 Todos difunden (all broadcast): todos los procesos
realizan una difusión, de modo que todos los procesos
reciben lo mismo
 Todos dispersan (all scatter): los procesos concatenan
diferentes transferencias
Comunicaciones colectivas compuestas: hay servicios que
resultan de una combinación de algunos de los anteriores.
-Todos combinan o reducción y extensión: el resultado de
aplicar una reducción se obtiene en todos los procesos, bien
porque la reducción se difunda una vez obtenida, O bien
porque se realicen tantas reducciones como procesos

-Barrera: es un punto de sincronización en el flujo de control


de un programa que todos los procesos de un grupo deben
alcanzar, para que cualquier proceso del grupo pueda
continuar con la ejecución de la instrucción que hay tras la
barrera. Que se puede implementar a nivel software
apoyandose en primitivas de sincronización de bajo nivel,
como cerrojos, semaforos o apoyo de hardware
-Recorrido (scan): procesos envían un mensaje,
recibiendo cada uno de ellos el resultado de reducir
un conjunto de estos mensajes
TABLA 7.6: ALGUNAS FUNCIONES COLEVTIVAS EN
MPI
DIFUSION MPI_Bcast()
UNO A TODOS
DISPERSION MPI_Scatter()
REDUCCION MPI_Reduce()
TODOS A UNO
ACUMULACION MPI_Gather()
TODOS MPI_Allgather()
TODOS A TODOS
DIFUNDEN
TODOS MPI_Allreduce()
SERVICIOS COMBINAN
COMPUESTOS BARRERAS MPI_Barrier()
SCAN MPI_Scan()

Se presentan algunos ejemplos de funciones para comunicación


colectiva en la biblioteca MPI open MP también permite utilizar
funciones colectivas
 Abordaremos 3 estilos de programación
 Paso de mensajes
 Variables Compartidas
 Paralelismo de datos
Las arquitecturas paralelas se diferencian en el estilo
de programación que más favorece su
implementación hardware
CON PASO DE MENSAJE

Cada procesador en el sistema tiene su espacio de


direcciones propio.

Se dispone de diversas herramientas software:


 Lenguajes de programación como Ada u Occam
 Bibliotecas de funciones que actúan de interfaz
al sistema de comunicaciones, como MPI, PVM
 Las funciones básicas de comunicación que ofrecen
las herramientas software para paso de mensajes
han de permitir, al menos, comunicación entre dos
procesadores.
 Send (destino, datos), función para enviar datos
 Receive (fuente, datos), función para recibir datos
 La función enviar se especifica en el proceso destino
y la variable a enviar.
 La función recibir se especifica la fuente y la
variable en la que se ubicarán los datos que se
reciben.
 Hay transmisiones síncronas y asíncronas.
 Si es síncrona, el proceso que ejecuta un send queda
bloqueado hasta que el destino ejecute la función
recieve correspondiente.Procesos fuente y destino
se sincronizan antes de realizar la trasnferencias de
datos.
 Si es asincrona, send no deja bloqueada el proceso
que lo ejecuta.
VARIABLE COMPARTIDA
Se supone que los procesadores en el sistema
comparten el mismo espacio de direcciones , al
compartir este espacio no se necesita transferir datos
explícitamente, implícitamente se realiza la
transferencia usando instrucciones del procesador
de lectura y escritura en memoria.
Las herramientas de software ofrecen mecanismos
para incrementar sincronización, estas herramientas
sitúan al programador en un nivel de diferente
atracción.
PARALELISMO DE DATOS
 Aprovecha los datos inherentes a aplicaciones en las
que los datos que se organizan en estructuras
(vectores,matrices).
 El programador escribe un programa con
construcciones que permiten aprovechar el
paralelismo de datos
 Es decir paralelizar bucles, construcciones que
especifican operaciones con escalaras o vectores.
 Hay programas tipo C que están ligados a
procesadores matriciales.

Das könnte Ihnen auch gefallen