Sei sulla pagina 1di 41

7.4.

PROGRAMACION
PARALELA
7.4 PROGRAMACION PARALELA

A diferencia a una programacin


secuencial, la programacin paralela
presenta los siguientes problemas:
Divisin en unidades de cmputo
independientes (tareas)
Agrupacin de tareas o carga de trabajo
(cdigo, datos)
Asignacin a procesadores
Sincronizacin y comunicacin
7.4 PROGRAMACION PARALELA

Existen herramientas y mtodos que facilitan


el desarrollo de programas paralelos
eficientes, legibles o mantenibles.
El mas sencillo es el uso de compiladores que
extraen el paralelismo automticamente.
Problema? Genera cdigos no eficientes para
cualquier programa.
Los mtodos que conducen de forma
sistemtica a una versin paralela es la mejor
opcin.
7.4 PROGRAMACION PARALELA
7.4.1 PUNTO DE PARTIDA
Una opcin es el uso de un cdigo secuencial para resolver el problema, y sobre el buscar la
paralelizacin
Podremos un ejemplo: calculo del numero pi.
Algoritmo Gottfried Wilhem von Leibniz
= 4(1/1-1/3+1/5-1/7+1/9...)
Cdigo
#include<stdio.h>
main()
{
int i, j = 1;
double pi = 0, rtdo;
for (i = 0; i < 1000000000; i++){
rtdo = 4 / (double)j;
if (i % 2 == 1)
pi -= rtdo;
else
pi += rtdo;
j += 2;
}
printf("Valor de Pi: %.16f", pi);
return 0;
}
7.4.1 PUNTO DE PARTIDA
Algoritmo John Wallis
= 2 ( 2/1 x 2/3 x 4/3 x 4/5 x 6/5 x 6/7 ....)
Cdigo
#include<stdio.h>
main()
{
int i, j = 2, k = 1;
double pi = 2;
for (i = 0; i < 1000000000; i++){
pi *= (j / (double)k);
if (i % 2 == 0)
k += 2;
else
j += 2;
}
printf("Valor de Pi: %.16f", pi);
return 0;
}
Estos 2 funcionan bien pero me devuelven solo 16 decimales, desp de ese devuelve todo 0.. pq??
Algoritmo Leonhard Euler
= 1 + 1/3 + 1x2 / 3x5 + 1x2x3 / 3x5x7 +....
Cdigo
#include<stdio.h>
main()
{
int i, cte = 1, cte2 = 1;
double pi = 1, j = 1, k = 1;
for (i = 0; i < 100; i++){
j *= cte++;
k *= (cte2 += 2);
pi += (j / k);
}
printf("%.15f", pi);
return 0;
}
7.4.1 PUNTO DE PARTIDA

Una opcin es partir del programa C, donde la


paralelizacin depende de la descripcin del
problema que se ha utilizado en la secuencial de
partida.
Ventaja?
Saber el tiempo de ejecucin real de las diferentes
funciones o tareas de que consta la aplicacin.
Permite una distribucin equilibrada de la carga de
trabajo entre procesadores.
Permite encontrar fcilmente las partes de la
aplicacin a la que se debe dedicar mas esfuerzo
de paralelizacin, que suponen mayor tiempo.
7.4.1 PUNTO DE PARTIDA

Otra opcin es partir de la definicin de la


aplicacin.
Buscando una descripcin para admitir
paralelizacin (pi descrito por integracin
numrica).
Ademas nos podemos apoyar en
programas paralelos para aprovechar las
caracteristicas de la arquitectura y la
biblioteca de funciones paralelas.
7.4.1 PUNTO DE PARTIDA
7.4.1 PUNTO DE PARTIDA
7.4.1 PUNTO DE PARTIDA
7.4.1 PUNTO DE PARTIDA
7.4.1 PUNTO DE PARTIDA
Sun Constellation
Sus 51 aos, Andreas Bechtolsheim, uno de los fundadores de Sun Microsystems, ha
presentado a la supercomputadora Sun Constellation System, en la Conferencia
Internacional de Super Computadoras en Dresden, Alemania.
Esta computadora por lo que pude investigar, esta computadora tiene casi la misma
memoria que 200,000 computadoras juntas y un disco duro de 1.7 Petabytes(PB?),corre a
421 teraflops es bastante rpida en comparacin con la Blue Gene/L de IBM que llega a los
280 teraflops.
Sin embargo a pesar de ser muy poderosa, tiene un gran inconveniente, la cantidad de
energia ya que es la misma que normalmente se usara para operar un tren de alta
velocida(o sea mucho).
La primera Sun Constellation System,llamada Ranger, se instalara en la Universidad de
Texas para ayudar a los cientficos e ingenieros aprocesar clculos extremadamente grandes
y complejos.
Sin embargo IBM no se queda atrs y tambin anuncio en la misma conferencia que, planea
crear otra supercomputadora, que seria la ultima Blue Gene, la
Blue Gene/P y al parecer seria 3 veces mas rpida que la anterior
Blue Gene/L, y correra a velocidades de 1 petaflop(1000 teraflops).
7.4.2 MODOS DE PROGRAMACION

Hay dos modos de programacin


SPMD (single program, multiple data) o
conocido como paralelismo de datos.
MPMD (multiple program, multple data) o
conocido como paralelismo de tareas o
funciones.
7.4.2 MODOS DE PROGRAMACION
7.4.2 MODOS DE PROGRAMACION

SPMD
Usados para sistemas masivamente paralelos.
La dificultad de encontrar cientos de unidades de
codigo diferentes dentro de una aplicacin, mas
facil de resolvar usando un programa unico.
Usando sistemas con memoria distribuida evita la
necesidad de tener que distribuir el codigo entre
los nodos, solo habria que distribuir datos.
Por tanto en multiprocesadores como en
multicomputadores, se aplica en mayor medida el
modo SPMD
7.4.2 MODOS DE PROGRAMACION
7.4.2 MODOS DE PROGRAMACION
7.4.2 MODOS DE PROGRAMACION

En los programas paralelos se pueden usar


combinaciones MPMD y SPMD.
Programaciones dueo-esclavo se
consideran una variante del modo entre
procesos esclavos y recolectar los
resultados que estos generan
combinandolos en un resultado.
7.4.2 MODOS DE PROGRAMACION

Se pueden crear esclavos dinamicos.


Si todos los esclavos tienen el mismo codigo,
este dueo-esclavo seria una combinacin
de los modos MPMD y SPMD.
Los programas conforman una solucin
dueo-esclavo o MPMD se pueden juntar en
un nico programa SPMD usando
instrucciones para dirigir a los procesos hacia
las unidades de codigo que han de ejecutar
cada uno de ellos.
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS

Para obtener programas paralelos deben


de permitir la realizacin de las siguientes
tareas:
Localizar paralelismo
Distribuir la carga de trabajo entre procesos
Crear y terminar procesos
Comunicacin
Sincronizacin entre procesos
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
BIBLIOTECAS DE FUNCIONES PARA
PROGRAMACION PARALELA
Usa lenguaje secuencial y una biblioteca de
funciones, el cuerpo de los procesos y hebras se
escribe con lenguaje secuencial.
Los programadores estn familiarizados con los lenguajes
secuenciales, no tienen que aprenderlos, los usan en la
programacin de sus aplicaciones secuenciales.
Las bibliotecas estn disponibles para todos los sistemas
paralelos (multiprocesadores, multicomputadores, incluidos
cluster)
Las bibliotecas estn mas cercanas al hardware y dan al
programador un control a ms bajo nivel.
Se pueden usar a la vez bibliotecas para programar con
hebras y bibliotecas para programar con procesos
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS

Los ejemplos de bibliotecas son Pthread,


MPI, PVM Y OpenMP
OpenMP posee, adems de bibliotecas,
directivas.
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
LENGUAJE PARALELOS Y DIRECTIVAS DEL
COMPILADOR
Los lenguajes paralelos y el uso de lenguajes
secuenciales con directivas sitan al programador
en un nivel de abstraccin superior que las
bibliotecas de funciones.
Ahorra o facilita el trabajo de paralelizar, aunque
sea un tipo de paralelismo: paralelismo de tareas
o de datos.
Ambos pueden evitar o facilitar al programador
algunas de las tareas.
7.4.2 MODOS DE PROGRAMACION
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
Los lenguajes paralelos ahorran o facilitan estas tareas
usando:
Construcciones propias del lenguaje, como FORALL en HPE, para
paralelismo de datos, y par en Occam, para paralelismo de
tareas. Estas construcciones, adems de distribuir la carga de
trabajo, pueden crear y terminar procesos.
Directivas del compilador, por ejemplo HPF se usa INDEPENDENT
para paralelizar bucles, PROCESSORS para especificar el tamao
y forma de la mquina, o DISTRIBUTE para especificar como los
datos se asignan a la maquina virtual especificada por la
directiva PROCESSORS.
Funciones de biblioteca, que implementan en paralelo algunas
operaciones usuales.
La ventaja principal es que pueden ser mas fciles de escribir y
entender, y mas cortos
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
COMPILADORES PARALELOS
Se pretende que un compilador paralelo, a
partir de una versin secuencial, extraiga
automticamente paralelismo a nivel de
bucle (paralelismo de datos) y de funcin
(paralelismo de tareas).
Se realizan anlisis de dependencias entre
bloques de condigo:
Entre iteraciones de un ciclo
Entre funciones
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
Si tenemos dos bloques de cdigo a analizar,
B1 y B2, de forma que B1 se encuentra antes
que B2 en el flujo secual del programa. La
dependencias que detecta el anlisis 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
posicin de memoria en la que tambin escribe
B2.
Dependencias WAR: ocurre si B1 lee una posicin
de memoria que modifica B2.
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
Las dependencias WAW y WAR son evitables
cambiando la asignacin de memoria;
tambin se pueden eliminar asi algunas RAW.
Todos estos compiladores estn limitados a
aplicaciones que exhiben un paralelismo
regular, como los clculos a nivel de bucle.
No slo los encontramos en computadores
paralelos de altas prestaciones, tambin los
podemos encontrar en el nivel de PC y
estaciones como los compiladores intel.
7.4.4 ALTERNATIVAS DECOMUNICACIN

La programacin paralelo puede ofrecer al


programador, adems de la comunicacin
entre dos procesos, uno productor y otro
consumidor, comunicaciones en las que
intervienen mltiples procesos.
Esto se usa para comunicar a los procesos
que forman parte del grupo que esta
colaborando en la ejecucin de un cdigo.
En algunos casos no se usan para comunicar
explcitamente datos, sino para sincronizar
entre si a componentes del grupo.
7.4.4 ALTERNATIVAS DECOMUNICACIN

Hay patrones de comunicacin que se repiten en


diferentes algoritmos paralelos.
Se reordenan datos entre procesos, siguiendo patrones
reconocibles (permutaciones) como: rotacin, intercambio
y baraje.
Se difunden datos (difundir la media en el clculo de la
desviacin tpica).
Se reduce un conjunto de datos a un nico dato mediante
una operacin: para sumar los elementos de una lista;
calculo del mximo o del mnimo.
Se realizan mltiples reducciones en paralelo con el mismo
conjunto de datos, cada uno con diferente numero de
elementos.
Se sincronizan mltiples procesos en un punto.
7.4.4 ALTERNATIVAS DECOMUNICACIN

Generalmente se aplican las funciones


colectivas a los procesos (p0, p1, p2,
,pn-1) dentro de un grupo, por eso a veces
se les denomina comunicaciones uno a
todos, en lugar de uno a muchos.
La siguiente figura se presenta una
clasificacin de las funciones colectivas en
cinco grupos:
7.4.4 ALTERNATIVAS DECOMUNICACIN
7.4.4 ALTERNATIVAS DECOMUNICACIN

Comunicacin mltiple uno a uno: hay componentes


del grupo que envan un nico mensaje y
componentes que reciben un nico mensaje.
Comunicacin uno a todos: enva y todos los procesos
reciben
Difusin: los procesos reciben el mismo mensaje
Dispersin (scatter): cada proceso receptor recibe un
mensaje diferente
Comunicacin todos a uno: todos los procesos en el
grupo envan un mensaje a un nico proceso.
Reduccin: mensajes enviados se combinan en un solo
mensaje mediante un operador
Acumulacin (gather): mensajes se reciben de forma
concatenada en el receptor
7.4.4 ALTERNATIVAS DECOMUNICACIN

Comunicacin todos a todos: todos los procesos ejecutan una comunicacin


uno a todos, pero cada proceso recibe n mensajes, cada uno de un proceso
diferente.
Todos difunden (all broadcast): todos los procesos realizan una difusin, 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
combinacin de algunos de los anteriores.
Todos combinan o reduccin y extensin: el resultado de aplicar una reduccin se
obtiene en todos los procesos, porque la reduccin se difunda una vez obtenida
Barrera: punto de sincronizacin 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 ejecucin de la instruccin que hay tras la barrera. Que se puede
implementar a nivel software apoyandose en primitivas de sincronizacin de bajo
nivel, como cerrojos, semaforos o apoyo de hardware
Recorrido (scan): procesos envan un mensaje, recibiendo cada uno de ellos el
resultado de reducir un conjunto de estos mensajes
7.4.4 ALTERNATIVAS DECOMUNICACIN
7.4.4 ALTERNATIVAS DECOMUNICACIN
7.4.4 ALTERNATIVAS DECOMUNICACIN
7.4.4 ALTERNATIVAS DECOMUNICACIN
7.4.4 ALTERNATIVAS DECOMUNICACIN

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 A TODOS TODOS DIFUNDEN MPI_Allgather()
TODOS COMBINAN MPI_Allreduce()
SERVICIOS
BARRERAS MPI_Barrier()
COMPUESTOS
SCAN MPI_Scan()