Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Paralelos
Autor:
Miguel Angel Botella Tomey
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
2
Introducción
Tipos de algoritmos de ordenación:
– No basados en las operaciones comparación-intercambio.
Complejidad mayor que los basados en operaciones
comparación-intercambio.
Sistemas de memoria compartida.
Ejemplo: Rank Sort.
– Basados en operaciones comparación-intercambio.
Complejidad menor que los no basados en operaciones
comparación-intercambio.
Sistemas de memoria distribuida.
Divide y vencerás.
Ejemplos: Bubble Sort, Mergesort, Quicksort.
3
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
4
Rank Sort (I)
Para el elemento actual se cuentan el número de elementos
menores que él. Ese número (rank) será la posición que ocupe.
Acceso compartido a una lista de elementos sistemas de
memoria compartida.
5
Rank Sort (II)
Algoritmo Secuencial
6
Rank Sort (III)
Algoritmo paralelo usando n procesadores
7
Rank Sort (IV)
Algoritmo paralelo usando n2 procesadores
– Se usan (n-1) procesadores para calcular la posición del elemento y
un contador para cada elemento.
– Incremento del contador en paralelo: O(1).
– Incremento del contador secuencialmente.
1 paso para la iniciar el contador.
1 paso de la comparación
en paralelo.
(n-1) pasos para incrementar.
Requiere como máximo
(n+1) pasos.
Complejidad: O(n)
8
Rank Sort (y V)
– Usando estructura de árbol se puede reducir el tiempo.
Complejidad: O(logn)
9
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
10
Algortimos comparación-intercambio
(I)
Procesador P2
recv (&A,P1);
if (A > B) {
send (&B,P1);
B = A;
} else
send (&A,P1);
12
Algortimos comparación-intercambio
(III)
13
Algortimos comparación-intercambio
(y IV)
14
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
15
Bubble sort (I)
Los elementos mayores se van moviendo hacia el final de la lista en cada
fase. 4 2 7 8 5 1 3 6
4 2 7 8 5 1 3 6
F
A 2 4 7 8 5 1 3 6
S 2 4 7 8 5 1 3 6
E
1 2 4 7 8 5 1 3 6
2 4 7 5 8 1 3 6
2 4 7 5 1 8 3 6
2 4 7 5 1 3 8 6
F 2 4 7 5 1 3 6 8
A
2 4 7 5 1 3 6 8
S
E 2 4 7 5 1 3 6 8
2 2 4 5 7 1 3 6 8
...
2 4 5 1 7 3 6 8
16
Bubble sort (II)
Algoritmo secuencial
for (i = n-1; i > 0; i--) Suponiendo que una operación
comp-interc tiene complejidad O(1)
for (j = 0; j < i; j++) {
k = j + 1;
if (a[j] > a[k]) { Fase 1: (n-1) comp-interc
temp = a[j]; Fase 2: (n-2) comp-interc
a[j] = a[k]; ....
a[k] = temp; Total comparaciones-intercambios
}
n(n-1)/2
}
Complejidad: O(n2)
17
Bubble sort (III)
Algoritmo paralelo (Odd-Even Transposition Sort)
– Bubble sort es inherentemente secuencial ya que una iteración no
puede empezar hasta que la anterior finalice.
– Modificación: se introduce una estructura de pipeline.
– Dos pasos:
Fase Par (Even): los elementos en posiciones pares se comparan con los
de su derecha.
Fase Impar (Odd): los elementos en posiciones impares se comparan
con los de su derecha.
– Complejidad:
Con n=p tenemos O(n) comparaciones-intercambios.
Con n>p tenemos O(n/p) comparaciones-intercambios.
18
Bubble sort (y IV)
F P0 P1 P2 P3 P4 P5 P6 P7
4 2 7 8 5 1 3 6
0p 4 2 7 8 5 1 3 6
1i 2 4 7 8 1 5 3 6
2p 2 4 7 1 8 3 5 6
3i 2 4 1 7 3 8 5 6
4p 2 1 4 3 7 5 8 6
5i 1 2 3 4 5 7 6 8
6p 1 2 3 4 5 6 7 8
7i 1 2 3 4 5 6 7 8
19
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
20
Shearsort (I)
¿Qué ocurre si la secuencia de elementos está lógicamente
dispuesta sobre una tabla?
Más pequeño
Secuencia “snakelike”
Más grande
21
Shearsort (II)
Algoritmo secuencial
– Fases pares (2,4,6,...)
Cada columna se ordena de menor a mayor independientemente.
– Fases impares (1,3,5,...)
Filas pares: se ordenan de mayor a menor.
Filas impares: se ordenan de menor a mayor.
– Complejidad para n elementos y una tabla de n x n:
O( n(logn+1))
22
Shearsort (III)
Fila
1 4 14 8 2 2 4 8 14 1 4 7 3
2 10 3 13 16 16 13 10 3 2 5 8 6
3 7 15 1 5 1 5 7 15 12 11 9 14
4 12 6 11 9 12 11 9 6 16 13 10 15
1 1 3 4 7 1 3 4 2 1 2 3 4
2 8 6 5 2 8 6 5 7 8 7 6 5
3 9 11 12 14 9 11 12 10 9 10 11 12
4 16 15 13 10 16 15 13 14 16 15 14 13
24
Shearsort (V)
Fila
1 4 14 8 2 2 4 8 14 2 16 1 12
2 10 3 13 16 16 13 10 3 4 13 5 11
3 7 15 1 5 1 5 7 15 8 10 7 9
4 12 6 11 9 12 11 9 6 14 3 15 6
1 1 2 12 16 1 4 7 3 1 3 4 7
2 4 5 11 13 2 5 8 6 8 6 5 2
3 7 8 9 10 12 11 9 14 9 11 12 14
4 3 6 14 15 16 13 10 15 16 15 13 10
1 1 8 9 16 1 8 9 16 1 3 4 2
2 3 6 11 15 3 6 11 15 8 6 5 7
3 4 5 12 13 4 5 12 13 9 11 12 10
4 7 2 14 10 2 7 10 14 16 15 13 14
1 1 2 3 4 Complejidad
-En cada iteración, cada procesador ordena
2 8 7 6 5
su fila en O( nlog n) pasos.
3 9 10 11 12 -Cada transposición necesita n( n-1)
comunicaciones: O(n).
4 16 15 14 13
26 Fase 5 - Fin
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
27
Mergesort (I)
Algoritmo divide y vencerás.
– División de un problema en otros de menor complejidad.
– Objetivo: hacer la división y combinación de los subproblemas de
forma eficiente.
– Características:
Cálculo de la solución de los subproblemas en paralelo.
Combinación de los subproblemas en paralelo.
Posible sincronización entre subproblemas.
– Normalmente es el esquema más apropiado para paralelizar (innato
en los problemas paralelos).
28
Mergesort (II)
Algoritmo secuencial
– Fase de división:
La lista ordenada de divide por la mitad.
Cada mitad se vuelve a dividir por la mitad.
Así hasta que queden listas de un solo elemento.
– Fase de mezcla:
Se mezclan pares de listas de un solo elemento.
Las nuevas listas obtenidas se vuelven a mezclar en pares.
Así hasta obtener una sola lista mezclada y ordenada.
– Complejidad: O(nlogn).
29
Mergesort (III)
4 2 7 8 5 1 3 6
4 2 7 8 5 1 3 6
4 2 7 8 5 1 3 6
4 2 7 8 5 1 3 6
2 4 7 8 1 5 3 6
2 4 7 8 1 3 5 6
30 1 2 3 4 5 6 7 8
Mergesort (IV)
Algoritmo paralelo simple (n procesadores)
P0
P0 P4
P0 P2 P4 P6
P0 P1 P2 P3 P4 P5 P6 P7
P0 P2 P4 P6
P0 P4
P0
31
Mergesort (V)
– Análisis algortimo paralelo simple
Comunicaciones
tstartup+(n/2)tdata P0 P4
tstartup+(n/4)tdata P0 P2;P4 P6
tstartup+(n/8)tdata P0 P1;P2 P3;P4 P5;P6 P7
tcomm=2(tstartup+(n/2)tdata+tstartup+(n/4)tdata + tstartup+(n/8)tdata+...) =
2 ((logp)tstartup+ntdata )
Computación (mezcla)
tcomp=1 P0;P2;P4;P6
tcomp=3 P0;P4
tcomp=7 P0
tcomp= (2i-1) (desde i=1 hasta logp)
– Complejidad: para n=p se tiene O(p); para n>p se tiene O(n/p).
32
Mergesort (VI)
Algoritmo Odd-Even Mergesort
– Dadas dos listas ordenadas:
L1 = {a1,a2,a3,...} y L2 = {b1,b2,b3,...}
– Mezcla estas dos listas en una sola siguiendo estas reglas:
Los elementos con índice impar (odd) son mezclados en una lista L3 (ci).
Los elementos con índice par (even) son mezclados en otra lista L4 (di).
La lista L5 final ordenada se obtiene asi:
– e1=c1
– e2i = min {ci+1,di}
– e2i+1 = max {ci+1,di}
– Uso de un hipercubo para una mayor eficiencia.
– Complejidad para n procesadores: O(log2n)
33
Mergesort (VII)
L1 L2
1 3 4 7 2 5 6 8
a1 a2 a3 a4 b1 b2 b3 b4
L3 L4
1 2 4 6 3 5 7 8
c1 c2 c3 c4 d1 d2 d3 d4
L5
1 2 3 4 5 6 7 8
e1 e2 e3 e4 e5 e6 e7 e8
34
Mergesort (VIII)
Algoritmo Bitonic Mergesort
– Secuencia bitónica:
secuencia de elementos a0,a1,a2,...,an que se incremente monótamente y
cuando llega a un máximo se decrementa monótamente.
secuencia de elementos a0,a1,a2,...,an que si desplazamos cíclicamente
se sigue cumpliendo el anterior punto.
35
Mergesort (IX)
Mezcla bitónica:
– Si realizamos las operaciones comparación-intercambio con los
elementos ai y ai+(n/2) obtenemos dos secuencias bitónicas, teniendo
una de ellas los elementos menores y la otra los elementos mayores.
3 5 8 9 7 4 2 1
3 4 2 1 7 5 8 9
2 1 3 4 7 5 8 9
1 2 3 4 5 6 7 8
36
Mergesort (X)
Como proceder (para 8 elementos) en caso de que la secuencia
de elementos no sea bitónica:
– Fase 1: Convertir cada par de elementos adyacentes en una
secuencia incremental y la siguiente decremental.
– Fase 2: Dividir secuencias bitónicas de 4 elementos en secuencias
bitónicas de 2 elementos. Ordenar cada secuencia de 4 elementos
(incrementando o decrementando) y mezclar con mezcla bitonic en
una secuencia de 8 elementos.
– Fase 3: Ordenar la secuencia de 8 elementos con mezcla bitónica.
Complejidad: O(log2n) para n procesadores.
37
Mergesort (y XI)
8 3 4 7 9 2 1 5
39
Quicksort (I)
Algoritmo divide y vencerás.
Algoritmo secuencial
– Pasos:
Selección de un pivote inicial que divida la lista de elementos.
Todos los elementos menores que el pivote irán a una lista, y los demás a
la otra lista.
Para cada una de las sublistas se elije de nuevo otro pivote y se repite el
proceso de división.
La división finalizará cuando todas las sublistas estén ordenadas.
– Interesante elegir un buen pivote (balanceo de sublistas).
– Complejidad O(nlogn).
40
Quicksort (II)
4 2 7 8 5 1 3 6
3 2 1 4 5 7 8 6
2 1 3 4 5 7 8 6
1 2 3 6 7 8
41
Quicksort (III)
Algoritmo paralelo simple (n procesadores)
P0
P0 P4
P0 P2 P4 P6
P0 P1 P6 P7
42
Quicksort (V)
– Análisis algortimo paralelo simple (suponemos un pivote ideal)
Comunicaciones
tstartup+(n/2)tdata
tstartup+(n/4)tdata
tstartup+(n/8)tdata ...
tcomm= (tstartup+(n/2)tdata+tstartup+(n/4)tdata + tstartup+(n/8)tdata+...) =
(logp)tstartup+ntdata
Computación
tcomp= n + n/2 + n/4 + n/8+ = ... = 2n
– Complejidad:
Mejor situación: O(2n).
Peor situación: O(n2); elección del primer elemento de una sublista.
43
Quicksort (VI)
Algoritmo paralelo en un Hipercubo
– Algoritmo simple puede ser ¡¡¡ menos eficiente que el secuencial !!!
– ¿Cómo dividir un hipercubo?
Dado un hipercubo d-dimensional, se divide en dos hipercubos (d-1)-
dimensionales.
Ejemplo: Hipercubo tri-dimensional.
44
Quicksort (VII)
– Pasos (supongamos un hipercubo lógico de procesadores):
Un procesador elige un pivote y lo envía por broadcast al resto.
Se divide la lista de elementos con el pivote.
Cada procesador con su dimensión a 0 envían los elementos mayores al
pivote a su procesador adyacente con su dimensión a 1. Al revés ocurre
igual, excepto por se envía los elementos menores al pivote.
Cada procesador une lo que queda de su lista con la recibida.
Estos 2 últimos pasos se repiten recursivamente (logd) veces.
Finalmente, cada sublista es ordenada secuencialmente en cada
procesador.
– Importante: elección de un buen pivote.
– Variación: hyperquicksort
Paso inicial de ordenamiento: elimina el último paso anterior y facilita la
elección del pivote.
45
Quicksort (VIII)
46
Quicksort (y IX)
– Análisis:
Computación
Selección del pivote: O(1).
Particionar en paralelo ‘x’ elementos a enviar (para elementos
ordenados): O(logx).
Mezcla de los datos (la sublista mayor tiene ‘x’ elementos): O(x).
tcomp = O(1) + O(logx) + O(x)
Comunicación
Broadcast del pivote: d(d-1)/2(tstartup+tdata)
Datos recibidos (‘x’ elementos) de la partición: tstartup+(x/2)tdata.
tcomm = d(d-1)/2(tstartup+tdata) + tstartup+(x/2)tdata
Complejidad Total
tcomp + tcomm
El broadcast del pivote lo más costoso: usar mecanismo eficientes.
47
Índice
Introducción
Rank Sort
Algoritmos de comparación-intercambio
Bubble Sort
Shearsort
Mergesort
– Simple
– Odd-Even
– Bitonic
Quicksort
– Simple
– Hypercube
Bibliografía
48
Bibliografía
Kumar, Grama, Gupta, Karypis: Introduction to Parallel
Computing. Design and Analysis of Algorithms. The Benjamin
Cumming Publishing Company. 1994. Segunda edición.
Barry Wilkinson, Michael Allen: Parallel programming. Prentice-
Hall. 1999.
49