Documentos de Académico
Documentos de Profesional
Documentos de Cultura
REFERENCIAS
La mayoría de los libros de la bibliografía, en particular:
• Foster, cap 3
• Kumar, Grama, Gupta, Karypis, cap 4
• Wilkinson, Allen, cap 2.3 y 2.4
• Quinn
y, por supuesto, el de Introducción a la Programación
Paralela
1
Análisis de algoritmos paralelos
2
Tiempo secuencial
3
Tiempo de ejecución paralelo
4
Tiempo de ejecución paralelo
DIFICULTADES:
5
Tiempo de ejecución paralelo
Computación 1
Comunicación 1 (sincronización en memoria compartida)
Computación 2
Comunicación 2
...
t(n,p)=ta(n,p)+tc(n,p)
Computación 1 2 3
Comunicación 1 1 1
Computación 2 3 2
Comunicación 2 1 1
treal(n,p)=ta(n,p)+tc(n,p)+toverhead(n,p)=8
7
Tiempo de ejecución paralelo, ejemplo
2 3
t(n,p)=ta(n,p)+tc(n,p)=15
treal(n,p)=ta(n,p)+tc(n,p)-tsolapamiento(n,p)=14
8
Tiempo de ejecución
• Overhead debido a:
sincronización,
puesta en marcha de los procesos,
sobrecarga de la red de comunicación,
...
• Se suele considerar:
t(n,p)=ta(n,p)+tc(n,p)+to(n,p)-ts(n,p)
9
Suma de n números
• Secuencial: t(n)=n-1
10
Suma de n números
• Pasos: log n
• Con n=64
si cada paso secuencial y paralelo igual coste:
t(n)≅8*t(n,p)
si cada paso secuencial coste 2 y paralelo coste 5:
t(n)≅3.5*t(n,p)
• Y en memoria distribuida problema de acceso a los datos.
11
Suma de n números. En hipercubo
• Cada procesador tiene dos valores, a y b
P0 P1 P0 P1 P0 P1
0 1 2 3 1 1 5 3 1 5 5 3
P2 P3 P2 P3 P2 P3
4 5 6 7 9 5 13 7 9 13 13 7
P0 P1 P0 P1 P0 P1
6 5 5 3 6 22 5 3 28 22 5 3
P2 P3 P2 P3 P2 P3
22 13 13 7 22 13 13 7 22 13 13 7
13
Suma de n números. En hipercubo
• Pasos: log n
• Con n=64
si cada paso secuencial coste 2 y paralelo coste 7:
t(n)≅2,5*t(n,p)
si ts=2*tw y tw=2*tc:
t(n)≅1,5*t(n,p)
si ts=10*tw y tw=10*tc:
t(n)≅0,16*t(n,p)
14
Suma de n números. En malla
15
Suma de n números. En malla
• Si p=2n
• Con n=64
si ts=2*tw y tw=2*tc:
t(n)≅1,4*t(n,p)
si ts=10*tw y tw=10*tc:
t(n)≅0,1*t(n,p)
16
Suma de n números. En anillo
• Si p=2n
1+2+22+...+2n-1 = 2n –1= p-1 comunicaciones
• Con n=64
si ts=2*tw y tw=2*tc:
t(n)≅0,74*t(n,p)
si ts=10*tw y tw=10*tc:
t(n)≅0,04*t(n,p)
17
Coste de comunicaciones
• Son de los siguientes órdenes:
Comunicación vecinos Comunicación todos
hipercubo log p/2 log p/2
malla 2*√p log p/2
anillo p-1 log p/2
red p-1
18
Causas de reducción de las prestaciones
• Contención de memoria:
En memoria compartida el acceso a datos comunes o que están en el
mismo bloque de memoria producirá contención.
Si los datos son de lectura puede no haber ese problema.
En el ejemplo los procesadores escriben en zonas distintas. No hay
problema de coherencia, pero puede haber de contención si hay datos
en los mismos bloques de memoria.
• Código secuencial:
Puede haber parte imposible de paralelizar, como puede ser la I/O.
En el ejemplo la inicialización de variables. Además, si los datos están
inicialmente en un procesador y hay que difundirlos el coste es lineal.
• Comunicaciones:
En memoria distribuida, es tiempo adicional al aritmético.
Pueden implicar trabajo de procesadores intermedios.
• Tiempo de sincronización:
Cuando un proceso tiene que esperar a que estén disponibles datos
procesados por otro.
Conlleva comunicaciones en memoria distribuida.
20
Causas de reducción de las prestaciones
• Desbalanceo de la carga:
21
Granularidad de la computación
• Uso de muchos procesadores no es realista:
No dispondremos de tantos procesadores.
Aunque dispongamos de ellos hay caída de las prestaciones.
22
Suma de n números con p procesadores
En cada Pi, i=0,1,...,p-1
suma=0
para j=i*n/p, ...,(i+1)*n/p-1
suma=suma+a[j]
finpara
sincronización
a[i]=suma
inicio=i*2
desplazamiento=1
si i mod 2=0
activo=true
en otro caso
activo=false
finsi
para k=1,2,...,log p-1
si activo
a[inicio]=a[inicio]+a[inicio+desplazamiento]
desplazamiento=desplazamiento*2
finsi
si i mod desplazamiento <>0
activo=false
finsi
finpara 23
Suma, en memoria distribuida
En cada Pi, i=0,1,...,p-1
suma=0
para j=0, ...,n/p-1 suma=suma+a[j] finpara
si i mod 2=0
recibir en b de i+1 activo=true
en otro caso
enviar suma a i-1 activo=false
finsi
desplazamiento=2
para k=1,2,...,log p-2
si activo
suma=suma+b
desplazamiento=desplazamiento*2
si i mod desplazamiento <>0
activo=false
enviar suma a i-desplazamiento/2
en otro caso
recibir en b de i+desplazamiento/2
finsi
finsi
finpara
si i=0 suma=suma+b finsi
24
Suma de n números con p procesadores
• En memoria compartida todas las variables son locales
salvo el array a.
• En memoria distribuida la sincronización por el paso de
mensajes.
• El tamaño del problema (n) es múltiplo del número de
procesadores (p). Se puede generalizar fácilmente.
• t(n,p)=2*n/p*tc+6*(log p-1)*(ts+tw)
si p<<<n podemos tener en cuenta sólo los términos de
mayor orden y t(n)/t(n,p)=p, que es lo mejor que se puede
obtener
para ir 10 veces más rápido:
con ts=2*tw y tw=2*tc,
si n=1000000, 100000, 10000, p=10
con ts=10*tw y tw=10*tc, es n=330*p*log p
si n=1000000 p=10, 100000 p=11, 10000 no posible
25
Speed-up
• Mide la ganancia de velocidad que se obtiene con un programa
paralelo.
• Es el cociente entre el tiempo secuencial y el paralelo:
S(n,p)=t(n)/t(n,p)
• ¿Qué t(n)?
El del mejor algoritmo secuencial que resuelve el
problema, pero ¿cuál es el “mejor algoritmo secuencial”?
depende del tamaño de la entrada, distribución de los datos,
máquina..., y puede no conocerse (Por ejemplo, ¿cuál es el
coste de la multiplicación de matrices?).
El del mejor algoritmo secuencial conocido. Pero depende
de los mismos parámetros anteriores.
Tiempo de ejecución en un procesador del algoritmo
paralelo. Pero puede que el mejor esquema para paralelizar
no sea bueno en secuencial.
El tiempo de ejecución de un algoritmo secuencial
“razonablemente bueno”. Habrá que indicar cuál se usa.
26
Speed-up
• El speed-up será menor que el número de procesadores
usado. Si no podría hacerse un algoritmo secuencial mejor
que el que se usa, simulando el algoritmo paralelo.
• En algunos casos puede haber speed-up superlineal por
mejor gestión de la memoria al usar más procesadores.
•Para un tamaño de 40
27
Speed-up, suma con n/2 procesadores
• En memoria compartida:
n/log n→∞
28
Eficiencia
• Da idea de la porción de tiempo que los procesadores se
dedican a trabajo útil.
• Es el speed-up partido por el número de procesadores:
E(n,p)=S(n,p)/p=t(n)/(p*t(n,p))
• Valor entre 0 y 1.
1
• Para un tamaño de
0,9
problema fijo se aleja 0,8
del valor óptimo (1) al 0,7 p=10
aumentar el número 0,6 p=20
de procesadores. 0,5 p=30
• Para un número de 0,4 p=40
procesadores fijo 0,3 p=50
aumenta al 0,2
0,1
aumentar el tamaño
0
del problema. 1000 2000 3000 4000 5000
29
Eficiencia, suma con n/2 procesadores
• En memoria compartida:
2/log n→0
30
Speed-up, suma con p procesadores
Con p fijo
• En memoria compartida:
n/(n/p+log p)→p
31
Eficiencia, suma con p procesadores
Con p fijo
• En memoria compartida:
n/(n+p*log p)→1
32
Coste
• Representa el tiempo (el trabajo) realizado por todo el
sistema en la resolución del problema.
33
Distribución del trabajo
34
Distribución de datos. Suma de n números. En
malla
5 4 6 7
1 0 2 3
9 8 10 11
13 12 14 16
35
Distribución de datos. Suma de n números. En
anillo
7 comunicaciones
3 2 0 1 5 4 6 7
5 comunicaciones
36
Escalabilidad
• Para un sistema paralelo interesa que las prestaciones se sigan
manteniendo en cierta medida al aumentar el tamaño de sistema.
to(n,p)=p*t(n,p)-t(n)
t(n,p)=(to(n,p)+t(n))/p
E(n,p)=t(n)/(to(n,p)+t(n))
t(n)=(E(n,p)/(1-E(n,p))*to(n,p)=K*to(n,p)
Procesadores: 4 a 16 16 a 64 64 a 256
memoria compartida,
hipercubo, y malla o anillo 8 6 5.33
con comunicaciones
directas
malla sin 8 8 8
comunicaciones directas
• En hipercubo:
Se(n,p)=n*p/(n+(1+ts+tw)*log p)
• En malla:
Se(n,p)=n*p/(n+(ts+tw)*√p+log p)
41
Estudio experimental de la escalabilidad
• Se estudia el número de operaciones por segundo
(flops) por procesador:
Variando el tamaño de la entrada al variar el número de
procesadores,
O utilizando el máximo tamaño de la entrada que cabe en
la memoria del sistema