UFRPE-Licenciatura em Computação
Disciplina:Computação Paralela e Distribuída
Equipe: Marcos Tadeu A de Souza
Joacir Siqueira
Algoritmo Hiperquicksort
Índice
•Comentário do algoritmo......de 3 a 8
Transcrição do algoritmo, com comentários para os
procedimentos principais, conforme marcador numérico,
inserido no lado direito.
•Demonstração prática.........de 9 a 13
Aplicação
do
algoritmo
comentado, com um exemplo concreto.
anteriormente
2
Algoritmo Hiperquicksort
(Comentário do algoritmo)
ALGORITMO HIPERQUICKSORT PARALELO
Global n
d
i
Local logical.num
partner
root
splitter
(Nº inicial de elementos por processador)
(Dimensão do hipercubo)
(Nº da dimensão do hipercubo em uso)
(Numeração única do processador)
(Processador sócio na troca)
(Processador raiz no hipercubo em uso)
(Valor médio do processador raiz)
3
Algoritmo Hiperquicksort
(Comentário do algoritmo)
begin
for all Pj , where 0  j < 2d do (1)
Ordene os n elementos usando o quicksort seqüencial (2)
if d  0 then (3)
for i  d downto 1 do (4)
root  root of the binary i-cube containing processor
logical.num (5)
if logical.num = root then (6)
splitter  valor médio do processador logical.num (7)
endif
Processador raiz envia valor médio para demais
processadores do i-cubo (8)
Use splitter para partição dos valores ordenados em uma
lista dos maiores e dos menores
partner  logical.num  2 (i-1) (9)
4
Algoritmo Hiperquicksort
(Comentário do algoritmo)
partner
partner
partner
partner
if logical.num > partner then (10)
Envia elementos menores para o processador
Recebe
elementos
maiores
do
processador
else (logical.num < partner)
Envia elementos maiores para o processador
Recebe
elementos
menores
do
processador
endif
Junte as 02 listas numa lista única ordenada (11)
endfor
endif
endfor
end
5
Algoritmo Hiperquicksort
(Comentário do algoritmo)
(1) Para todo processador índice j, onde j seja maior ou
igual a zero e menor que a dimensão do hipercubo
(2) Cada processador executa seqüencialmente o algoritmo
quicksort, com sua lista
(3) Enquanto d for maior que zero, executar as instruções
do laço
(4) A variável i recebe o valor de d, decrementado até 1. A
cada ciclo i será decrementado até o valor limite 1.
Quando i for igual a 1, o algoritmo se encerra.
(5) A variável root recebe o menor número de identificação
(em binário) do processador, do hipercubo que está
sendo processado.
(6) Se a numeração binária única do processador for a
mesma da variável root, executar os procedimentos
indicados no sublaço.
6
Algoritmo Hiperquicksort
(Comentário do algoritmo)
(7) A variável splitter recebe o valor médio do processador cuja
numeração binária única é igual a da variável root
(8) A variável splitter é divulgada para os demais processadores
do hipercubo
(9) Efetua o cálculo do processador parceiro, para todos os
processadores do hipercubo. O cálculo é realizado através da
operação lógica OU EXCLUSIVO, entre a numeração binária do
processador e o número binário calculado pela expressão 2 (i-1)
Assim, para o processador 1 ( 01 em binário ), quando i=2, tem
como parceiro ( partner ):
01
10
11 (processador 3)
7
Algoritmo Hiperquicksort
(Comentário do algoritmo)
(10) Para cada processador, executa um dos procedimentos
condicionais, conforme sua numeração seja menor ou maior que
a do seu parceiro. Cada processador que possui numeração
maior que seu parceiro, envia para ele os elementos de sua lista
menores que o splitter (valor médio) do processador root do
hipercubo corrente e recebe deste os valores maiores que o
splitter.
(11) Após as permutações, entre processadores e seus parceiros,
junte/ordene suas listas numa lista única de elementos.
8
Algoritmo
Hiperquicksort
Algoritmo
Hiperquicksort
(Demonstração Prática)
P2 11 36 44 50 53 67 86 95
P3 1
P0 8 16 17 48 49 66 96 97
P1 39 47 51 54 58 65 76 82
5 15 16 23 35 44 81
Aqui verificamos inicialmente os passos (1) e (2), ou seja distribuição dos
elementos entre os processadores e a ordenação de suas listas. A seguir como
d = 2 - passo (3), entra-se no laço seguinte – passo (4), com i recebendo
inicialmente o valor de d, ou seja i=2. Como estamos inicialmente trabalhando
com todo o hipercubo, o processador de menor numeração P0, é selecionado
como raiz – root recebe a numeração de P0 - passo (5). O valor médio de P0
(48, splitter) é divulgado para todos os demais processadores – passo (8). A
seguir cada processador calcula seu processador parceiro – passo (9). Assim
formam-se os pares P0/P2 e P1/P3.
9
Algoritmo
Hiperquicksort
Algoritmo
Hiperquicksort
(Demonstração Prática)
P2 49 66 96 97 50 53 67 86 95
P3 51 54 58 65 76 82 81
P0 8 16 17 48 11 36 44
P1 39 47 1
5 15 16 23 35 44
Após o cálculo dos parceiros ( partners), efetuam-se as permutações
indicadas no passo (10). O processador P0 envia a P2, os elementos de sua
lista maiores que o splitter (valor médio do processador raiz P0) e este envia
para P0 os elementos de sua lista menores que o splitter. Os mesmo processo
ocorre com a dupla P1/P3. Cada processador junta/ordena em uma lista
única, os elementos recebidos de seus parceiros e os elementos
remanescentes de sua lista original.
10
Algoritmo
Hiperquicksort
Algoritmo
Hiperquicksort
(Demonstração Prática)
P2 49 50 53 66 67 86 95 96 97
P3 51 54 58 65 76 81 82
P0 8 11 16 17 36 44 48
P1 1
5 15 16 23 35 39 44 47
Reiniciando o processo, entra-se no passo (4), decrementando-se i mais uma
vez, fazendo i=1 (2-1). Como i agora é igual a 1, ocorrerá o processamento
em paralelo, nas 02 metades do hipercubo original. Numa das metades temos
um hipercubo formado por P0/P1 e noutra P2/P3. Em cada uma das metades,
será escolhido um root (P0 e P2) – passo (5). Dentro de cada uma das
metades, a variável splitter receberá o valor médio do root (indicados em azul
na demonstração acima) – passo (7) e esta será informada aos demais
processadores pertencentes ao hipercubo em curso, ou seja, P0 informa P1 e
P2 informa P3 – passo (8)
11
Algoritmo
Hiperquicksort
Algoritmo
Hiperquicksort
(Demonstração Prática)
P2 49 50 53 66 67 51 54 58 65
P3 86 95 96 97 76 81 82
P0 8 11 16 17 1
P1 36 44 48 23 35 39 44 47
5 15 16
A seguir, dentro de cada uma das metades, cada processador calcula seu
partner – passo (9). Ocorrem as permutações indicadas no passo (10),
dentro da dimensão de cada uma das dimensões do hipercubo (cada uma
das metades). O processador P0 envia a P1, os elementos de sua lista
maiores que o splitter (valor médio do processador raiz P0) e este envia
para P0 os elementos de sua lista menores que o splitter. Os mesmo
processo ocorre com a dupla P2/P3. Cada processador junta/ordena em uma
lista única, os elementos recebidos de seus parceiro e os elementos
remanescentes de sua lista original.
12
Algoritmo
Hiperquicksort
Algoritmo
Hiperquicksort
(Demonstração Prática)
P2 49 50 51 53 54 58 65 66 67
P3 76 81 82 86 95 96 97
P0 1
P1 23 35 36 39 44 44 47 48
5
8 11 15 16 16 17
Reiniciando o processo, entra-se no passo (4), decrementando-se i mais uma
vez, fazendo i=0 (1-1). Como i agora é igual a 0, nenhum dos procedimentos
seguintes do laço é executado, finalizando-se o algoritmo. Como podemos
perceber, os elementos encontram-se devidamente ordenados, localizando-se
os de menor valor nos processadores de menor numeração e os de maior
valor nos processadores de maior numeração.
13
Download

Algoritmo Hiperquicksort