Está en la página 1de 41

7.4.

PROGRAMACION
PARALELA
7.4 PROGRAMACION PARALELA

• A diferencia a una programación


secuencial, la programación paralela
presenta 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
7.4 PROGRAMACION PARALELA

• 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.
• Problema? Genera códigos no eficientes para
cualquier programa.
• Los métodos que conducen de forma
sistemática a una versión paralela es la mejor
opción.
7.4 PROGRAMACION PARALELA
7.4.1 PUNTO DE PARTIDA
• Una opción es el uso de un código secuencial para resolver el problema, y sobre el buscar la
paralelización
• Podremos un ejemplo: calculo del numero pi.
Algoritmo Gottfried Wilhem von Leibniz
= 4(1/1-1/3+1/5-1/7+1/9...)
Código
#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 ....)
Código
#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 +....
Código
#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 opción es partir del programa C, donde la


paralelización depende de la descripción del
problema que se ha utilizado en la secuencial de
partida.
• Ventaja?
• Saber el tiempo de ejecución real de las diferentes
funciones o tareas de que consta la aplicación.
• Permite una distribución equilibrada de la carga de
trabajo entre procesadores.
• Permite encontrar fácilmente las partes de la
aplicación a la que se debe dedicar mas esfuerzo
de paralelización, que suponen mayor tiempo.
7.4.1 PUNTO DE PARTIDA

• Otra opción es partir de la definición de la


aplicación.
• Buscando una descripción para admitir
paralelización (pi descrito por integración
numérica).
• 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 años, 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 rápida en comparación 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 usaría 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 científicos e ingenieros aprocesar cálculos extremadamente grandes
y complejos.
• Sin embargo IBM no se queda atrás y también 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 rápida que la anterior
“Blue Gene/L”, y correría a velocidades de 1 petaflop(1000 teraflops).
7.4.2 MODOS DE PROGRAMACION

• 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.
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 aplicación, 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 dueño-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 dueño-esclavo seriía una combinación
de los modos MPMD y SPMD.
• Los programas conforman una solución
dueño-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 realización de las siguientes
tareas:
– Localizar paralelismo
– Distribuir la carga de trabajo entre procesos
– Crear y terminar procesos
– Comunicación
– Sincronización 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 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
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS

• Los ejemplos de bibliotecas son Pthread,


MPI, PVM Y OpenMP
• OpenMP posee, además 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 sitúan al programador
en un nivel de abstracción 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, además 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 tamaño
y forma de la máquina, 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 fáciles 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 versión secuencial, extraiga
automáticamente paralelismo a nivel de
bucle (paralelismo de datos) y de función
(paralelismo de tareas).
• Se realizan análisis 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 código 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 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.
7.4.3 HERRAMIENTAS PARA OBTENER
PROGRAMAS PARALELOS
• 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.
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

• 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.
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

• Hay patrones de comunicación que se repiten en


diferentes algoritmos paralelos.
– Se reordenan datos entre procesos, siguiendo patrones
reconocibles (permutaciones) como: rotación, intercambio
y baraje.
– Se difunden datos (difundir la media en el cálculo de la
desviación típica).
– 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.
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

• 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
clasificación de las funciones colectivas en
cinco grupos:
7.4.4 ALTERNATIVAS DECOMUNICACIÓN
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

• 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
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

• 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, porque la reducción se difunda una vez obtenida
– Barrera: 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
7.4.4 ALTERNATIVAS DECOMUNICACIÓN
7.4.4 ALTERNATIVAS DECOMUNICACIÓN
7.4.4 ALTERNATIVAS DECOMUNICACIÓN
7.4.4 ALTERNATIVAS DECOMUNICACIÓN
7.4.4 ALTERNATIVAS DECOMUNICACIÓN

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()

También podría gustarte