Anda di halaman 1dari 165

Paradigmas de Computacin

Paralela, Concurrente y
Distribuida

Dra. Veronica Gil-Costa


e-mail: gvcosta@unsl.edu.ar
ggvcosta@gmail.com

Bibliografa

O. Bonorden et all - PUB library, Release 6.0 - User guide and function reference. 1998.

O. Bonorden et all - The Puderborn University BSP (PUB) Library- Desing, Implementation and
performance. 1999.

M. Goudreau et all - Towards Efficiency and Portability: Programming with the BSP model. 1996.

J. Keller et all - Practical PRAM programming. John Wiley & Sons inc.. 2001.

C. Leopold - Parallel and Distributed Computing: A survey of models, paradigms, and approaches.
2001.

W.F. Mccoll - BSP Programming. 1994.

M. Quinn - Parallel Computing. Theory and Practice. Second Edition. McGraw-Hill. Inc. 1994.

L.G. Valiant - A Bridging Model for Parallel Computation. 1990.

General Purpose parallel Architectures. 1990.

B. Wilkinson, et all - Parallel Programming: Tecniques and Aplications using Networked


Workstations and Parallel Computers. 1999.

Modelo de Computacin Secuencial


Computadora von Neumann
Clock

CPU
Memoria de
Programa

Cmo se escriben los programas?


Memoria
RAM

..
Mi
..
M1
M0

ALU
Registros
Contador de Programa

Qu es la computacin paralela?


Tradicionalmente el soft. se escribe


en forma serial

Es el uso simultneo de mltiples


recursos de cmputos para resolver un
problema

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

ARPANET

1969

1976 1987

1990

1993

1995

1999

2005

2007

tiempo

ARPANET


Primera red de computadoras


bsico

Experimento militar

Comienzo de la Internet

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

ARPANET
Cray-1

1969

1976 1987

1990

1993

1995

1999

2005

2007

tiempo

Cray-1


Procesamiento vectorial: Usa la misma instruccin


para realizar la misma operacin sobre varios
argumentos

150millones de operaciones por segundo de punto


flotante

Computadores grandes, costosos

Dueos: Universidades, gobierno, grandes


industrias.

Usuarios experimentados (tarjetas perforadas)

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)

ARPANET
Cray-1

1969

1976 1987

1990

1993

1995

1999

2005

2007

tiempo

Computacin Paralela


Popular a fines de los 80 principios


de los 90
Primera Crisis

Problema: el software limitado a la


investigacin y la milicia

Los lenguajes de alto nivel para el


modelo de Von- Neumann: C y
Fortran

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)
Redes de Comp.

ARPANET
Cray-1

1969

1976 1987

NOW

1990

1993

Beowulf

1995

1999

2005

2007

tiempo

Redes de Computadoras


NOW: proyecto de la Universidad de Bekeley

Primer cluster de computadoras ms poderoso del


mundo

Beowulf: es un estilo de cluster diseado para


realizar clculos paralelos HPC

Tena 16 computadores personales Intel 200MHz


conectados por medio de un switch Ethernet

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)
Redes de Comp.

ARPANET
Cray-1

1969

1976 1987

NOW

1990

1993

GRID
Beowulf

1995

1999

2005

2007

Hacer del poder computacional tan fcil como la red elctrica


Proyecto SETI: Globus Toolkit

tiempo

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)
Redes de Comp.

ARPANET

PVM

Cray-1

1969

1976 1987

MPI
NOW

1990

1993

GRID
Beowulf

1995

1999

OpenMP
Multi-core

2005

2007

tiempo

Lnea Temporal

Lnea Temporal

Top 500 http://www.top500.org/lists/2010/11


229376 GB
186368 Cores
Intel EM64T Xeon X56xx
(Westmere-EP) 2930 MHz (11.72
GFlops)

Noviembre 2010

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)
Redes de Comp.

ARPANET

PVM

Cray-1

1969

1976 1987

MPI
NOW

1990

1993

GRID
Beowulf

1995

1999

OpenMP

Cloud
Multi-core Comp.

2005

2007

tiempo

Cloud Computing


Es un paradigma que ofrece servicios a travs de


internet.

Los usuarios acceden sin conocimiento de la


gestin de internet

Utilizan cachs temporales de clientes (equipos de


escritorio, porttiles, etc.).

A pesar de que las capacidades de las PC han


mejorado, gran parte de su potencial se
desperdicia

Lnea Temporal
Sist. Paralelos

Sist. Distribuidos

Sist. Hibridos

prototipo Parallel
Inference Machine
(PIM)
Redes de Comp.

ARPANET

PVM

Cray-1

1969

1976 1987

MPI
NOW

1990

1993

GRID
Beowulf

1995

1999

GPU
OpenMP

Cloud
Multi-core Comp.

2005

2007

tiempo

GPU


Descienden de los chips grficos de finales de los


80.

Usualmente no tenan soporte para dibujo de


figuras.

La velocidad de las CPU de la dcada del 90 no


permitieron implementar GPUs ms avanzados

Popularidad reciente: alta especializacin de las


GPU para cclulo con valores de punto flotantes
(grficos 3D)

Computacin Paralela


Caractersticas del problema

Aplicaciones

Por qu usar computacin Paralela?

Computacin Paralela:
Caractersticas del problema


Se puede dividir en partes discretas de trabajo


que se pueden resolver simultneamente

Ejecutar mltiples instrucciones de programa en


cualquier instante de tiempo

Se resuelve en menos tiempo con mltiples


recursos que con uno slo

Aplicaciones


Sistema de prediccin del tiempo


Superficie de USA + Candada = 20.000.000 Km2
Altitud de 20 km
 20 M Km2 * 20 Km = 400 M km3
 .
 4 * 1013 clculos computacionales para predecir 1 hs.

Si queremos saber la prediccin de 2 das y con un procesador


se ejecuta 1 billn de clculos por seg

4 * 1013 * 48 horas = 2 * 1015 clculos


2 * 1015 cal./ 109 calc. por seg. = 2 * 106 seg. = 23 das!!!

Aplicaciones


Calcular las orbitas planetarias y


galcticas

Movimiento de las placas tectnicas


Qu tienen estas aplicaciones en comn?
 Trfico de vehculos en horas extremas


Operaciones de mercado (bancos,


Se
caracterizan por requerir el procesamiento de una
economa)
gran cantidad de informacin en forma rpida

Explotacin de petrleo

Por qu usar Computacin Paralela?




Razones principales:
 Ahorrar tiempo
 Resolver grandes problemas

OtrasParalela
razones:
LaComp.
es la evolucin de la computacin
secuencial
que intenta
emular
lo que sucede
en el
 Aprovechar
el uso
de recursos
no locales
mundo real, donde varios eventos
 Ahorrar costos: usar varias computadoras
complejos e interrelacionados suceden simultneamente


econmicas
Evitar problemas de memoria

Paradigmas de Computacin
Paralela, Concurrente y
Distribuida
Introduccin a los Sistemas Paralelos

Terminologa


Tarea: programa o un conjunto de


instrucciones (tipo-programa) que
se ejecuta en un procesador.

Paradigmas de computacin Paralelas


Computacin Concurrente


Es la simultaneidad en la ejecucin de mltiples


tareas interactivas. Es la base de la Comp. Paralela.

Son tareas que se ejecutan en el mismo instante.

Es una coleccin de procesos o hilos secuenciales


que se ejecutan (lgicamente) en paralelo.

Pseudo-paralelismo: cuando las tareas se ejecutan


en una mquina secuencial.

Como se puede implementar la


concurrencia?


Multiprogramacin:


Multiprocesamiento:


Los threads multiplexan su ejecucin sobre


una mquina secuencial

Los threads multiplexan su ejecucin sobre


multicores o multiprocesadores

Procesamiento distribuido:


Los procesos multiplexan su ejecucin sobre


diferentes mquinas

Coherencia y seguridad


Si los threads acceden a recursos


compartidos se logra seguridad si:


Todos los accesos no tienen efecto


sobre los recursos (ej. variables)

Slo un acceso a la vez


(exclusin mutua)

Problema de Too much milk


Tiempo

Tu

3:00

Llegas a casa

3:05

Miras en la heladera
no hay leche
Vas al mercado

3:10
3:15

compaero de cuarto

Llega a casa

3:20
Llegas al mercado
Mira la heladera, no hay leche
Hay que SINCRONIZAR y actualizar datos correctamente
3:25
Compras la leche
Va al mercado
3:30
3:35
3:45

Llegas a casa
Pones en la heladera

Llega al mercado
Compra la leche
Llega a casa, Oh! No!!!

Problema: filsofos cenando







Hay 5 filsofos sentados en una mesa


redonda
Entre cada filsofo hay un chopstick.
Cada filsofo hace dos cosas: pensar y
comer


El filsofo piensa por un rato


 Cuando tiene hambre
 Agarra el chopstick derecho e izquierdo
 No puede comer sin los 2 chopstick, sino espera
Cuando termina de comer libera los chopstick.

Problemas: Competencia, coherencia y seguridad por los recursos


 semforos, mutex, etc.

Paradigmas de computacin Paralelas


Computacin Paralela vs.
Computacin Distribuida


Divide una aplicacin en tareas que se


ejecutan al mismo tiempo

Divide una aplicacin en tareas que se


ejecutan usando diferentes recursos

Paradigmas de computacin Paralelas

Computacin Paralela

vs.

Computacin Distribuida

diferentes
recursos
Divide una aplicacin en tareas Utiliza
fsicamente separados
que se ejecutan simultneamente
(fuertemente acoplado)
Se consideran varias aplicaciones
Se considera una aplicacin por a la vez (pueden pertenecer a
diferentes usuarios).
vez.
Objetivo: acelerar la ejecucin de Objetivo: permitir que varios
usuarios
trabajen
en
forma
una aplicacin
cooperativa
Se ejecutan sobre arquitecturas Se ejecutan sobre arquitecturas
abiertas
y
homogneas
con
memoria heterogneas,
dinmicas
compartida

Sistema Distribuido


Cada procesador tiene su propia memoria: La


direccin de memoria de un procesador no mapea
en otro procesador (no hay direcciones globales a
travs de los procesadores).

Cada procesador opera independientemente

El acceso a los datos de otro procesador lo define


explcitamente el usuario (pasaje de mjes, sync.,
etc.)

Sistema Distribuido


Ventajas:



Memoria escala con el nmero de procesadores


Cada procesador accede a su propia memoria
sin interferencia ni overhead causado por
mantener la coherencia de la memoria

Desventajas:



El programador es responsable de la
comunicacin
Difcil mapear datos basados en memoria
global

Paradigmas de computacin Paralelas


Sin embargo tienen muchas caractersticas en comn:


Mltiples procesadores

Los procesadores estn interconectados por alguna


red

Mltiples procesos estn en progreso al mismo


tiempo y cooperan unos con otros

Paradigmas de computacin Paralelas

Multiplicacin de un vector por una


matriz un procesador

1
2
3
2

Si para cada resultado 5 t. 

4
5
6
5

7
8
9
8

Total 15 t. en 1 procesador

Multiplicacin de un vector por una


matriz varios procesadores

0*1+1*2+0*3

Proc0

1
2
3

4
5
6

0*4+1*5+0*6

Proc1

7
8
9
0*7+1*8+0*9

Proc2

Si para cada resultado 5 t.  Total 5 t. en 3 procesadores

Terminologa


Tarea Paralela: se ejecuta en varios


procesadores en forma segura
(resultados correctos).

Terminologa


Comunicacin:




A travs de pasaje de mensajes


A travs de memoria compartida
Acceso a memoria remota

Sincronizacin:


Coordinacin de tareas paralelas en tiempo


real.

Terminologa
El tamao de un proceso puede ser
descrito por su granularidad

TAMAO DE COMPUTACIN ENTRE DOS


PUNTOS CONSECUTIVOS DE
COMUNIACIN Y SINCRONIZACIN

Terminologa
Granularidad gruesa:
Comunicacin y sincronizacin

Cmputo

Comunicacin y sincronizacin
Mucho computo. Mas oportunidad para mejorar la performance.

Terminologa
Granularidad fina:
Comunicacin y sincronizacin
Cmputo
Comunicacin y sincronizacin
Cmputo
Comunicacin y sincronizacin
Cmputo
Comunicacin y sincronizacin
Ms overhead de comunicacin.
Menos oportunidad para mejorar la performance.

Granularidad


Como mtrica de granularidad se


puede utilizar una relacin entre
computacin y comunicacin:
Granularidad = Tcomp/Tcomm

Aumentar la granularidad:
Reduce los costos de creacin de procesos y
comunicacin entre procesos
Reduce el nmero de procesos concurrentes y la
cantidad de paralelismo

Terminologa


Speed-up: aceleracin del cdigo paralelo respecto


del cdigo secuencial
speed-up( P ) T1/ T(P)
Speed-up

Super-lineal
Speed-up lineal

Speed-up tpico
Numero de procesadores P

Eficiencia: se define como el ratio entre el speed-up


y el nmero de procesadores
Ef( P ) = speed-up(P)/P

Limites del Paralelismo




No todos los programas son


fcilmente paralelizables

Los programas tienen una parte


secuencial y una parte paralelizable

Parte secuencial
Dependencia de datos?
Parte paralela

a = b + c;
d = a + 1;
e = d + a;
for (i=0; i < e; i++)
M[i] = 1;

Ley Amadahls
Todo cmputo posee una porcin
serial s que no puede ser
paralelizable. Sin importar la
cantidad de procesadores P que se
utilicen, el tiempo de ejecucin no
puede ser menor que s.
Tpo secuencial

f
No se puede paralelizar:
Lmite de la mejora que se
puede obtener

Ley Amadahls
tiempo
Usando 5 procesadores para el
trabajo paralelo
25 seg.
+
50 seg.
+
25 seg.
100 seg.

secuencial
paralelo

25 seg.

secuencial

+
10 seg.
25 seg.

secuencial

secuencial
60 seg.

Speed- up = Tsec/Tpar
= 100 seg./ 60 seg. = 1.67

Administracin de tareas


Overhead agregado por la


administracin de un conjunto de tareas

Overhead: Tiempo requerido para


coordinar las tareas paralelas (opuesto al
hacer trabajo til)






Tiempo de Start-up
Sincronizacin
Comunicacin de datos
Software overhead, threads,
Tiempo de finalizacin de las tareas

Balance de carga


Es difcil dividir el trabajo uniformemente


entre los P procesadores

No basta con asignar el mismo trabajo a


todos los procesadores porque el tamao
de las tareas puede variar dependiendo
de los datos que use.

Ejemplo: gua telefnica

Cmputo - Comunicacin

Balance de Carga


Los procesos que terminan antes


deben esperar al proceso que ms
se demora



Tiempo ocioso
Menor utilizacin

Balance de Carga Esttica




El programador decide a priori la cantidad


de trabajo que se le asigna a cada
proceso
Funciona bien en sistemas homogneos


Todos los procesadores tienen las mismas


caractersticas
Cada proceso tiene la misma cantidad de
trabajo

No funciona bien en sistemas


heterogneos

Balance de Carga Dinmica




Cuando un proceso finaliza su tarea,


saca ms trabajo del proceso ms
cargado

Ideal para sistemas heterogneos


con carga de trabajo no uniforme

No funciona bien
en sistemas
distribuidos

Terminologa
Escalabilidad: Habilidad de demostrar
un incremento en el speed-up
paralelo

Trmino impreciso: se puede usar


para describir el hardware o el
software.

Escalabilidad
Hardware
 Al incrementar el nmero mquinas
mejora la performance del sistema
Escalabilidad con tamao de problema fijo
Analizar cmo vara el tiempo paralelo y la eficiencia al aumentar P

Cuntos P necesito para obtener una eficiencia del 50%?

Escalabilidad
Software
 Al aumentar el tamao del
problema no decrece la
performance del sistema


Tamao del problema: Tamao del


input o nmero de pasos en el
mejor algoritmo secuencial

Terminologa


Latencia: tiempo que toma en transmitir


un mensaje de un lugar a otro. (Demora)

Bandwidth: cantidad de bits que pueden


ser transferidos por segundo. Costo alto
en sistemas heterogneos.

Costo de comunicacin =
Latencia + Bandwith

Terminologa
Portabilidad

Caractersticas de ciertos programas


que les permite ser utilizados en
distintas arquitecturas sin que precise
Modificaciones de importancia

Clasificacin de las
Computadoras Paralelas

Aspectos del Hardware


Clasificacin de Flynn (1972)
SISD: nico flujo de instrucciones
aplicado a un nico flujo de datos
SIMD: nico flujo de instrucciones
aplicado a mltiples flujos de datos
MIMD: mltiplo flujo de instrucciones
aplicado a mltiple flujo de datos

SISD


Todas las computadoras con un nico


procesador, desde computadoras personales
hasta supercomputadoras
PC, Workstations

Programa
IS

CU
Procesador

Datos

DS

PU

MM

SIMD
PU1

DS1
DS2

PU2
CU

PUN
IS

load Ai
Load Bi
Ci = Ai*Ci

MM2

IS

DSN

Ejemplo:

MM1

SINCRONISMO

MMN

MIMD
IS1

CU
IS2

CU

CU

ISN

PU1

DS1
DS2

PU2

DSN

PUN

ISN

ASINCRONO

MM1
MM2

MMN
IS1

MIMD
MIMD
C. Distribuidas
y Paralelas
Memoria
Distribuida (privada)

Memoria
Compartida
Multiprocesador

BUS

Switch

Multicomputador

BUS

Switch

Paradigmas de computacin Paralelas

Memoria Compartida

Memoria Distribuida

Mecanismos de locks y
Sincronizacin.
Responsabilidad del
programador

Mecanismos de
comunicacin

Todos los procesadores


ven los mismos datos

Cada procesador ve
datos diferentes

Distribucin de datos

M. Compartida vs. M. Distribuida


M.Compartida





Se puede compartir datos rpidamente entre las


tareas
Acceso a datos en forma amigable para el
programador
Escalabilidad pobre entre CPUs y memoria.
Son caras

M.Distribuida
Escalable
No

existe problemas de coherencia de memoria.


Costo bajo.
Puede ser difcil mapear estructuras de datos en
diferentes procesadores (SAT-tree).

MIMD- Hardware
Topologas de M. Compartida
 Arquitectura basada en BUS




Existe saturacin del bus


Coherencia de cache
Performace limitada al bandwidth del bus

Arquitecturas basadas en Switch




Puede ser visualizada como una grilla de


cables con SW en las intersecciones y memoria
y procesadores en las terminales.
Muy cara

MIMD- Hardware
Topologas de M. Distribuida
 Redes basadas en BUS



Muy sencillas
No escalables

Redes basadas en SW



Rpidas
Jerarqua de SW: Fat-tree

Fat-Tree

Como programar en M. Compartida?




Los procesadores 1.. N


requieren la variable x

Slo hay un lugar donde


buscar

Condiciones de competencia:


Usar Sync. Para evitar conflictos

Como programar en M. Compartida?

Un nico proceso puede crear


mltiples threads concurrentes

Cada thread encapsula su propia ruta de ejecucin


Cada thread tiene estados locales y recursos compartidos
Los threads se comunican a travs de recursos compartidos como
la memoria

Como programar en M. Distribuida?




Los procesadores 1.. N requieren la


variable x

Hay n lugares donde buscar




Cada procesador tiene su


propia X
El valor de X puede variar

Para que el P1 busque X en P2:


 P1 enva una peticin de X a P2
 P2 enva una copia de X a P1
 P1 recibe la copia
 P1 la almacena en su memoria

Pasaje de Mensajes
Y
Creacin de Procesos

Creacin de procesos
Esttica:


Todos los procesos se especifican antes


de la ejecucin
El sistema ejecutar un nmero fijo de
procesos
El programador lo determina por lnea
de comando
SPMD y MPMD(Master-Slave)

Creacin de procesos
Dinmica:





Un proceso puede ser creado e inicializado


durante la ejecucin de otro proceso
Tambin pueden ser destruidos
La creacin y destruccin puede realizarse en
forma condicional (vara el nmero de procesos)
MPMD

tiempo
spawn()

Proceso 1

Proceso 2

Pasaje de mensajes


Las arquitecturas con memoria distribuida


usan comunicacin explcita para
intercambiar datos


El intercambio de datos requiere sincronizacin


(cooperacin) entre los senders-receivers

Cmo se describen los datos?


Cmo se identifican los procesos?
Qu significa que se complete un envo o recepcin?

Ejemplo


Se quiere calcular la distancia entre cada punto de


A[1..4] y B[1..4] y guardar los resultados en
C[1..4][1..4]

Ejemplo


Se quiere calcular la distancia entre cada punto de


A[1..4] y B[1..4] y guardar los resultados en
C[1..4][1..4]

Podemos dividir el
Trabajo entre dos
procesadores
P1 enva datos a P2
P1 y P2 computan
P2 enva datos a P1

Ejemplo

Patrones de comunicacin


Al usar pasaje de mensajes los programas


deben entender el cmputo y organizar la
comunicacin correctamente





Punto a Punto
Broadcast (1 a todos) Reduce (todos a 1)
All to all
Scatter (1 a varios) Gather (varios a 1)

Point-to-Point


Mtodo bsico de comunicacin entre 2


procesos


El procesador origen enva un mensaje al


procesador destino
El procesador destino recibe el mensaje y lo
procesa

El mensaje generalmente incluye






Datos
Longitud del mensaje
Direccin destino y posiblemente un tag

Synchronous vs. Asynchronous


Synchronous

No utiliza buffers

El receptor notifica cuando


recibe el mensaje

El proceso que enva espera


a que el destino reciba todo el
mensaje

tiempo
tiempo
send()

Solicita envo
Acknowledgement

send()
Mensaje

recv()
recv()

Synchronous vs. Asynchronous


Asynchronous
No existe confirmacin
Un usa buffers

Blocking vs. Non-Blocking


Blocking = Sync && Non-Blocking = Async

MPI son diferentes

tiempo
send()
recv()

Blocking vs. Non-Blocking


No Bloqueante
Permite ejecutar la prxima instruccin sin importar
que la rutina send() haya sido localmente completada

Es responsabilidad del programador que los datos que


se envan no sean modificados en las prximas
instrucciones

Fuente de Deadlock - Bloqueante




Si no hay suficiente capacidad en el buffer,


las operaciones send esperan hasta que
haya suficiente espacio disponible

Qu sucede con este cdigo:

Depende del
tamao del
buffer

Soluciones



Incrementar el tamao del buffer


Ordenar las operaciones send y recv en
forma ms cuidadosa

Broadcast
Un

proceso enva la misma


informacin a otros
procesadores

Se identifican los procesos que van a participar


en el broadcast

Mediante un nombre de grupo que es usado


como parmetro por la funcin de broadcast

El proceso que hace broadcast tambin puede


recibir el mensaje
Incluye send+sync

Broadcast
Si queremos paralelizar:

Scatter


Enva un conjunto de elementos de un


arreglo desde el procesador origen a un
conjunto de procesos
Process 0

Process 1
dato

dato

Process N
dato

Accin
buf
Cdigo

scatter

scatter

scatter

Gather



Un procesador recolecta los valores de


otros procesadores
Se utiliza luego de realizar cmputos en
forma paralela
Process 0

Process 1
dato

dato

Process N
dato

Accin
buf
Cdigo

scatter

scatter

scatter

Gather - Ejemplo
Processor 0..N
{

int r = rand();
int k = 0;
int buff[N];
Gatther( 0, &buff, r, pid );
for (i=0;i<N;i++)
k+=buff[i];

P0

P1

P2 P3 P4

19
30
11
K= 433
27

P5
3

Reduction


Cada procesador comienza con un valor y


necesita conocer la suma de los valores
almacenados en otros procesadores

Un reduction combina datos de todos los


procesadores y los retorna a travs de una
operacin

Algunas operaciones que se pueden aplicar son:


ADD, OR, AND, MAX, MIN, etc.

Ningn procesador puede finalizar un reduction


antes que los otros procesadores hayan
contribuido con sus valores

Ejemplo

Ejemplo en Paralelo

Paralelismo de datos
Paralelismo de tareas
y
Diseo de software paralelo

Paralelismo de Datos
Se caracteriza por la ejecucin paralela de
las mismas operaciones sobre diferentes
partes de un conjunto de datos
suficientemente grande
Tipos de paralelismo de datos:
SPMD y MPMD

Paralelismo de Datos



Es simple de programar
Existe una nica estructura de control o
ejecucin
El paralelismo aparece via pasos de
paralelismo de datos
Forma de particionar los datos

Paralelismo de Datos
for all i: A[i]=2*A[i]
P0

P1

P2

Paralelismo de datos

16 14 2

10 6

16 2

for all i>0: A[i]=A[i]+A[i-1]

12 20 30 16 2

Suma = 0.

18 16 14 24 18

Paralelismo de datos
secuencial

Paralelismo de Tareas o funcional


Ejecuta diferentes operaciones sobre
los mismos o diferentes datos
Se enfoca en la divisin
de tareas

Paralelismo de Tareas
v = alpha();
w = beta();
x = gamma(v, w);
y = delta();
printf ("%6.2f\n", epsilon(x,y));
alpha

Se puede ejecutar
alpha, beta, Y gamma, delta
en paralelo.

beta

gamma

delta

INDEPENDENCIA DE DATOS
epsilon

Ejemplo 2





Procesamiento de Seales: Un conjunto signal-data de


audio se transmite a travs de tres filtros computacionales
distintos.
Cada filtro es un proceso independiente. El primer
segmento de datos debe pasar por el primer filtro antes
de pasar al segundo.
Cuando lo hace, el segundo segmento de datos pasa por
el primer filtro.
En el momento en el tercer segmento de datos se
encuentra en el primer filtro, las tres tareas estn
ocupadas.

Divide y Vencers



Es un mtodo elegante para resolver problemas


Se divide el problema en problemas ms pequeos,
luego se resuelven las partes en forma separada y
se combinan los resultados parciales para obtener
el resultado final
Se utiliza recursivamente para dividir el problema
hasta alcanzar un punto en el que el problema es
trivial
X0 . Xn/m-1 xn/m. X2n/m-1

suma

x(m-1)n/m-1.. Xn-1

Divide y Vencers
MASTER
s = n/m;
//cantidad de elementos para los slaves
for ( i=0, x=0; i<m; i++, x = x+s )
send( &numbers[x], s, Pi );
//enva s nmeros al slave Pi
result = 0;
for( i=0;i<m; i++ )
recv( &part_sum, Pany);
sum += part_sum;

//Espera resultados de los slaves


//Acumula suma parciales

SLAVE
recv( numbers, s, Pmaster );
part_sum = numbers[0];
for( i=0; i< s; i++ )
part_sum += numbers[i];
send( &part_sum, Pmaster );

//Recibe s nmeros del master


//Realiza la suma
//Enva resultados

Con broadcast?

Divide y Vencers: Anlisis




El algoritmo secuencial requiere n sumas, con


una complejidad de O(n).
El algoritmo paralelo utiliza m+1 procesos.
Dividimos el anlisis en etapa de cmputo y
comunicacin
Etapa 1: Comunicacin:


m slaves leen n/m nmeros con un costo de


tcomm1=m*(tstartup+(n/m)tdata)

Etapa 2: Cmputo:


Los procesos esclavos suman n/m nmeros


requiriendo n/m sumas.
tcomp1 = n/m

Divide y Vencers: Anlisis




Etapa 3: Comunicacin:


Se envan los resultados parciales de las sumas


tcomm2 = m(tstartup+tdata)

Etapa 4: Cmputo:


Suma final de m sumas parciales


tcomp2 = m;

Costo total
tp = tcomm1 + tcomm2 + tcomp1 + tcomp2
= m(tstartup+(n/m)tdata)+m(tstartup+tdata) + n/m + m
= 2mtstartup+(n+m) tdata + n/m + m

Divide y Vencers: Recursivo









Esta formulacin crea un rbol binario de


procesos
Al inicio, el problema raz del rbol toma un
problema y lo divide en dos partes ms chicas
La divisin del problema contina hasta que las
hojas del rbol han recibido los problemas ms
bsicos
Cada hoja retorna la solucin de su problema al
nodo padre
Cada proceso padre combina y/o aplica alguna
operacin a la solucin entregada por los nodos
hijos
Eventualmente la raz genera la solucin al
problema original

Divide y Vencers: Recursivo


add( int *s)
{
if( numbers(s)<= 2 ) return (s[0] + s[1]);
else
{
Divide (s, s1, s2 ); //Divide s en dos grupos
part_sum1 = add(s1);
part_sum2 = add(s2);
return( part_sum1 + part_sum2);
}
Problema inicial
}
Divide el problema

Tareas finales

Divide y Vencers: Implementacin


Paralela


En una implementacin secuencial


se visita un nodo del rbol por vez
Una implementacin paralela
permite visitar varios nodos
simultneamente
Si se asigna un proceso a cada nodo
P0

Cada proceso solo


P1

estar activo
en un nivel del rbol

P3

2m sub-tareas
2m+1-1 procesos

P2
P4

P5

P6

Divide y Vencers: Implementacin


Paralela
una solucin mas eficiente es re-usar los procesos existentes
P0
P0

P4

P0

P0

P2

P1

P2

P4

P3

P4

P6

P5

P6

P7

Tambin se puede aplicar a tareas que son divididas en ms de dos


partes

Bucket sort: Secuencial




La mayora de los algoritmos de ordenacin


secuencial se basan en las operaciones de
comparar e intercambiar
Bucket sort:





Es un algoritmo de particin
Funciona bien si los nmeros se distribuyen
uniformemente en un intervalo [0..a-1]
El intervalo se divide en m regiones denominadas
buckets
Para ubicar un nmero en un bucket, i/m y usar el
resultados para identificar el bucket
--------------------------------------------

buckets

sort
merge

Bucket sort: Secuencial









Algoritmo secuencial:
Se divide el nmero i por el nmero de buckets y me
da el identificador del bucket donde lo debera ubicar.
Es decir los nmeros se distribuyen uniformemente en
buckets. Si los nmeros estn uniformemente
distribuidos, en cada bucket hay n/m nmeros.
Eso permite balancear la carga de trabajo asignada a
cada bucket.
luego se ordenan en forma secuencial los nmeros de
cada buckets y finalmente se aplica una funcin de
merge
--------------------------------------------

buckets

sort
merge

Bucket sort: Paralelo




Alternativa 1: Asignar un bucket a cada


procesador (todos los procesadores mantienen
el arreglo de nmeros desordenados)
Nmeros desordenados
--------------------------------------------

Buckets
grandes

sort
merge

Bucket sort: Paralelo






Alternativa 2:
Se divide la secuencia en m regiones, una para cada procesador.
Cada procesador genera buckets ms pequeos y distribuye los
nmeros en esos buckets.
Estos buckets pequeos se vacan en P buckets mas grandes para
ser ordenados.
Para ello c/procesador enva un bucket chico a c/u de los otros
procesadores (bucket i al procesador i)

Nmeros desordenados
-------------------------------------------procesadores

Buckets mas pequeos


Buckets
grandes

sort
merge

D&V Paralelo
Tipos de Algoritmos (Input-Output)
Los problemas se pueden clasificar segn sus
datos de entrada y salida
Comn-Comn (CC): las variables paralelas de
entrada y salida son comunes (replicadas) a todos
los procesadores del grupo
Comn-Privado (CP): las variables paralelas de
entrada son comunes (replicadas) pero las
variables resultado quedan privadas en cada
procesador
Privada-Comn (PC): las variables paralelas de
entrada son privadas de cada procesador y las
variables resultado son replicadas
Privada-Privada (PP): las variables de entrada y
salida son privadas

Caso de estudio:
Algoritmo shortest path


Un grafo G(V,E), donde V es el conjunto


de vrtices y E es el conjunto de arcos
conectando vrtices en V.
En un grafo dirigido cada arco tiene una
direccin
Un grafo puede ser representado como
una matriz de adyacencia
Aij = 0 si no hay un arco que une i con j
Aij = 1 si hay un arco que une i con j

Caso de estudio:
Algoritmo shortest path


Es un problema importante en la teora de grafos


y tiene gran aplicacin en problemas de
comunicacin y otros problemas computacionales
El problema involucra encontrar el paso ms corto
entre todos los pares de vrtices

0
1
2
3

0 1 2 3
0 1 0 0
0 0 1 1
0 0 0 0
1 0 1 0

Matriz de Adyacencia:
dice si hay un arco que une 2 vrtices

Algoritmo shortest path




La idea es determinar si el paso


desde el vrtice vi al vrtice vj va
vk, es ms corto que el menor paso
conocido
vk
vi

vj

Algoritmo shortest path




El paso desde el vrtice vi la vrtice vj es la


secuencia de arcos que los une y ningn arco se
repite 2 veces.

El problema requiere que encontremos el camino


mas corto

El algoritmo toma como entrada una matriz de


adyacencia A (NxN) y computa una matriz S(NxN)

Sij tendr la longitud del paso ms corto entre vi y


vj, o -1

Algoritmo shortest path




El algoritmo obtiene la matriz S en N pasos,


construyendo en cada paso k una matriz
intermedia I(k) que contiene el paso ms corto
conocido entre cada par de vrtices.

Inicialmente I(0) contiene la longitud entre (vi,vj),


si existe un arco, de lo contrario ser 0.

Durante el k-simo paso se evala nuevamente Iij


para determinar si:


El mejor paso conocido entre vi, vj es ms largo que


las longitudes combinadas desde vi a vk y desde vk
a vj. De ser as se actualiza Iij

Algoritmo shortest path

Algoritmo shortest path: Paralelo




Repartir las filas en P procesadores


en forma consecutiva

J=0;
for (i=0;i<P;i++)
{
for (;j< (N/P); j++)
send(i, fila j);
if(i==(P-1))
send(i, fila j+1)
}

Asigna un bloque contiguo a


cada procesador

Cada tarea es root de al menos un broadcast

Los datos requeridos en el ksimo paso no le pertenecen


al procesador

Computacin
Pipelined

Pipelined

T0

T1

T2

T3

El problema se divide en tareas que se


completan una despus de otra.

En la programacin paralela cada tarea se


ejecuta en un procesador diferente

Cada etapa contribuye a resolver el


problema y pasa informacin necesaria
para la siguiente etapa

Pipelined


Es posible incrementar la velocidad


de ejecucin:
1.

2.

3.

Si se ejecuta mas de una instancia del


problema
Si una serie de datos se procesan con
mltiples operaciones
Si los datos pueden ser enviados a las
siguientes etapas antes que la etapa
actual finalice

Pipelined
Si se ejecuta mas de una instancia
del problema
procesos

1.

P4

Inst.1 Inst.2

P3

Inst.1 Inst.2 Inst.3

P2

Inst.1 Inst.2 Inst.3 Inst.4

P1 Inst.1 Inst.2 Inst.3 Inst.4 Inst.5


tiempo
Se utiliza para ejecutar simulaciones con diferentes parametros para
obtener resultados comparativos.

Pipelined
1.

Si una serie de datos se procesan


con mltiples operaciones
Elementos de vector

2.

d4

P0

P1

P0

P1

P2

P1

P2

P3

P1
P2
tiempo

P3

P4

d3
d2
d1

P0
P0

Cada proceso realiza una operacin diferente sobre los elementos


Se utiliza para clculos aritmticos, como multiplicar elementos de vectores

1.
2.
3.

Pipelined
Si los datos pueden ser enviados a
las siguientes etapas antes que la
etapa actual finalice
P4

Se transfiere
suficiente inf.
para comenzar
la siguiente etapa

P4

P3

P3

P2

P2

P1

P1

P0

P0
tiempo

tiempo

Ejemplo


Problema: Sumar una lista de


nmeros almacenados en diferentes
procesadores

P1

P2

P3

P4

recv( Pi-1, acumulation );


accumulation += number;
send( Pi+1, accumulation)

P5

Tipos de Paralelismos

Threads


La estructura ms comn para


especificar procesos concurrentes es
FORK-JOIN
Programa principal
FORK
FORK
FORK

JOIN

JOIN

JOIN

Sistema de memoria compartida.

Threads


IP

Son rutinas livianas que comparten la misma zona


de memoria y las variables globales

code

Heap

IP
code

Heap

stack
threads
Rutinas de
Interrupcin

stack

IP

Files

Files
stack

Proceso

Rutinas de
Interrupcin

Threads


La creacin de threads es 3 ordenes


de magnitud menor a la creacin de
un proceso
La sync de los threads se puede
realizar ms eficientemente que la
sincronizacin de procesos

Threads: Ejemplo

Threads: memoria compartida


Instruccin
x = x+1;

Proceso 1
read x
compute x+1
write x

tiempo

Proceso 2
read x
compute x+1
write x

Variable x

write

write
read
read

+1

+1

Proceso 1

Proceso 2

Secciones Crticas
- Locks

El problema de variable compartida puede ser generalizada a cualquier recurso.


Por ej. I/O dispositivos

Locks


Locks: son variables de 1 bit que se


coloca en 1 para indicar que el proceso
ha ingresado a la seccin critica. Y se
coloca en 0 para indicar que no hay
procesos en la seccin critica.

Estos mecanismos generalmente se


implementan por hardware.

Pthread



El programa principal es un thread.


Un thread separado puede ser creado y destruido
utilizando:

pthread_t thread1;
pthread_create( &thread1, NULL, (void*)proc1, (void*) &arg);
pthread_join( thread1, void *status);
thread1
Main program
pthread_create( &thread1, NULL, (void*)proc1, (void*) &arg);

pthread_join( thread1, void *status);

proc1(&arg)
{
.
return(*status);
}

Pthread


#include <pthread.h>

pthread_cancel(&thread1)

for (j=0;j<NUM_THREADS;j++)
Detached
thread: threads que se crean y se terminan sin la necesidad de
usarifun(threads[j]
join se llaman!=
thread
tid)detached

pthread_cancel(threads[j]);
pthread_self

pthread_mutex_t mutex1;






void
print_it(void *arg)
pthread_mutex_init(&mutex1,NULL);
{
pthread_mutex_destroy(&mutex1);
pthread_t tid; /* get the calling thread's ID */
tid = pthread_self();
pthread_mutex_lock(
mutex1 );
printf("Thread %d \n", tid);
pthread_mutex_unlock( mutex1 );
}

Pthread
Destroying Mutexes
struct obj
thread_mutex_t
foo_mutex;
{
void foo()
pthread_mutex_t om;
{
int refcnt; ...
pthread_mutex_init(&foo_mutex,NULL);
};
obj_done(struct obj *op)
pthread_mutex_lock(&foo_mutex);
/* Do{work. */
pthread_mutex_lock(&op->om);
x = x+1;
if (--op->refcnt == 0)
pthread_mutex_unlock(&foo_mutex);
{
}
pthread_mutex_unlock(&op->om);
pthread_mutex_destroy(&op->om);
free(op);
}
else
pthread_mutex_unlock(&op->om);
}

Hardware?


Todas las computadoras modernas


tienen cache

Hyperthreading. Cada ncleo


dispone ahora de dos hilos de
procesamiento, con lo que el
sistema ve el microprocesador
como si tuviera ocho ncleos en
vez de cuatro
L2: 8Mb

Hardware
Si un therad en un core requiere un dato se trasfiere
desde la memoria hasta la cache del core (se hace una
copia).
Posteriormente cuando el thread quiere obtener el
dato accede a su cache.
Si otro thread ubicado en otro core quiere el mismo
dato, se hace una nueva copia del dato en la cache del
nuevo core que lo requiere. (hay 2 copias).
El problema surge cuando un thread modifica el
contenido del dato. Luego se debe usar un protocolo
de coherencia para asegurar la correctitud de los
datos.

Hardware


Protocolo de coherencia de cache




Poltica de actualizacin: se actualiza todas


las copias del dato en todas las cachs

Poltica de invalidar (ms comn): cuando


se modifica una copia en una cach, las
otras copias son invalidadas utilizando un bit
de validacin.

Hardware


La cach se organiza en bloques de


direcciones continuas
cach

Code:
a+=2;
b+=2;
c+=a+b;

bloques
ab

c
RAM

False sharing: un bloque puede ser pedido por varios threads, pero
cada thread accede a datos diferentes. Cuando se actualiza un dato
partes de las copias del bloque en otros cores deben ser actualizados
o invalidados

False-sharing
RAM

bloque

Address
tag

7
6
5
4
3
2
1
0

cache

cache

Core 1

Bloque en cache

Core 2

Ejemplo
sum
int sum, a[1000];
sum = 0;
for( i=0;i<1000; i++)
sum += a[i];

a
------------

Solucin 1
Proceso 1
sum1 = 0;
for( i=0; i<1000; i+=2 )
sum1 += a[i];

sum += sum1

Proceso 2
sum2 = 0;
for( i=1; i<1000; i+=2 )
sum2 += a[i];

sum += sum2

Ejemplo
sum
N procesos tomando
nmeros de a[]

a
------------

global_index
int a[array_size];
int global_index;
int sum = 0;
pthread_mutex_t mutex1;
Int nth = 10;
main()
{
int i;
pthread_t thread[nth];
for( i=0; i<array_size; i++ )
a[i] = i+1;
for(i=0;i< nth; i++ )
pthread_create(&thread[i],NULL,
slave, NULL);
for(i=0; i<nth; i++ )
pthread_join(thread[i],NULL);
}

Void *slave( void *ignorado)


{
int local_index, partial_sum = 0;
do {
pthread_mutex_lock(&mutex1);
local_index = global_index;
global_index++;
pthread_mutex_unlock(&mutex1);
if (local_index < array_size)
partial_sum += a[local_index];
}while(local_index < array_size )
pthread_mutex_lock(&mutex1);
sum += partial_sum;
pthread_mutex_unlock(&mutex1);
}

OpenMP


#include <omp.h>

g++-4.2 main.cc -o main.out fopenmp

Las directivas se especifican con #pragma

#pragma omp directive-name[clause[,] clause]...

Al final de una regin paralela hay una


sincronizacin implcita. Solo el thread master
contina la ejecucin.

Cuando un thread encuentra un constructor


paralelo, un grupo de threads es creado

OpenMP: clausuras


Private (lista de variables) En esta la lista de variables puede ser


separada por ", y para cada una de ellas se genera una copia en
cada thread, esta copia no tiene relacin con la original y no es
inicializada a menos que se utilice firstprivate.

Shared (lista de variables) En esta las variables de la lista son


comunes a todos los threads y cada uno de ellos puede modificarla
afectndola en forma global.

Threadprivate (lista de variables) Hace que la lista sea privada a


cada thread pero globales dentro de un thread.

Reduction (operador:lista de variables) Realiza una operacin de


reduccin sobre las variables que aparecen en la lista utilizando el
operador/intrnseco especificado. El operador puede ser: +, *, -,
&(and), |(or), ^(eqv), &&(neqv). El intrnseco puede ser: || (max),
(min), (and), (or).

if(expresin escalar): los threads se crean si al evaluar la expresin


es verdadera.

OpenMP


int omp_get_threads_num(void) Devuelve el


identificador del thread.

int omp_get_num_threads(void) Devuelve cuntos


threads se estn utilizando

int omp_get_num_procs(void) Devuelve el nmero


de procesadores accesibles

void omp_set_num_threads(int) Indica el nmero


de threads a utilizar

int omp_get_max_threads(void) Devuelve el


mximo posible de threads

OpenMP: Variables de entorno




OMP_NUM_THREADS Indica el
nmero de threads a usar.
export OMP_NUM_THREADS=4
setenv OMP_NUM_THREADS 4
set OMP_NUM_THREADS=4

OpenMP: Ejemplo
Si no quieren usar variables de
entorno pueden tener el mismo
efecto usando
omp_set_num_threads(NT);

OpenMP: Tipos de constructores


DO / for Comparten las
iteraciones de un loop.
Representa el paralelismo
de datos"

SECTIONS Divide el trabajo


en secciones discretas. Cada
seccin se ejecuta por un thread.
Paralelismo de tareas

Ejemplo
#pragma omp for[clause[,] clause]...
{
ciclo for
}

FOR

SCHEDULE(type, chunck): Describe cmo se dividen las iteraciones


de un loop entre los threads.

STATIC: Las iteraciones se dividen en chunks y asignados


estticamente a los threads
DYNAMIC: Las iteraciones se dividen en chunks y asignados
dinmicamente a los threads. Cuando un thread termina un chunk
se le asigna otro

Ejemplo static
#include <opm.h>
#define SIZE 4
#define N 8
int main( )
{
int i,chunk;
float a[N], b[N], c[N];
for( i=0;i<N ;i++)
a[i] = b[i] = i*1.0;
chunck = SIZE;
#pragma opm parallel shared(a,b,c) private(i)
{
#pragma opm schedule( static, chunk )
for( i=0;i<N;i++)
c[i] = a[i]+ b[i];
}
}

Ejemplo

SECTIONS

SECTIONS / END SECTIONS








Debe incluirse en una regin paralela.


Las secciones se dividen entre los threads.
Cada thread ejecuta una seccin diferente.
Es posible realizar paralelismo a nivel de tarea.
SECTION define cada una de las secciones.

OpenMP
SECTION

OpenMP: Directivas
#pragma omp single: slo un thread
ejecuta el cdigo

#pragma opm parallel shared(a,b,c) private(i)


{
BLOCK1
#pragma opm single
{
BLOCK2
}
BLOCK3
}

OpenMP: Directivas
#pragma omp master: el cdigo a
continuacin lo ejecuta solo el
thread master
#pragma opm parallel shared(a,b,c)
private(i)
{
BLOCK1
#pragma opm master
{
BLOCK2
}
BLOCK3
}

OpenMP: Directivas
#pragma omp barrier: barrera de
sync.
#pragma opm parallel shared(a,b,c)
private(i)
{
BLOCK1
#pragma opm barrier
BLOCK3
}

OpenMP: Directivas


#pragma omp critical: regiones


crticas
#pragma opm parallel shared(a,b,c)
private(i)
{
BLOCK1
#pragma opm critical (zona1)
{
x = x+1;
}
BLOCK2
}

Anda mungkin juga menyukai