Algoritmos Paralelos - ordenação Fernando Silva DCC-FCUP (Alguns dos slides são baseados nos do livro Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers, 2nd ed. de B. Wilkinson) Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 1 / 25
Ordenação em Paralelo Porquê? é uma operação frequente em muitas aplicações Objectivo? ordenar uma sequência de números (valores) por ordem crescente usando n processadores Speedup potencial? melhor algoritmo sequencial tem complexidade O(n log n) o melhor a que podemos aspirar com um algoritmo paralelo, usando n processadores é: complexidade óptima do algoritmo paralelo: O(n log n)/n = O(log n) Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 2 / 25
Comparação-e-troca com troca de mensagens (1/2) A ordenação sequencial requer a comparação de valores e a sua permuta nas posições que ocupam na sequência. E se for em paralelo? E se a memória for distribuída? versão 1: P 1 envia A para P 2, este compara B com A e envia para P 1 o min(a, B). Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 3 / 25
Comparação-e-troca com troca de mensagens (2/2) versão 2: P 1 envia A para P 2 ; P 2 envia B para P 1 ; P 1 faz A = min(a, B) e P 2 faz B = max(a, B). Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 4 / 25
Partição de dados Versão 1: n números e p processadores n/p números atribuídos a cada processador. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 5 / 25
Junção de duas sub-listas versão 2: Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 6 / 25
Bubble Sort (método da bolha) compara dois a dois e troca se estiverem fora de ordem. maiores valores vão sendo deslocados para o final da lista. número de comparações e trocas: n 1 i=1 i = n(n 1) 2 o que corresponde a uma complexidade O(n 2 ). Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 7 / 25
Exemplo bubble-sort Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 8 / 25
Bubble Sort Paralelo Ideia é ter várias iterações a correr em paralelo. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 9 / 25
Par-Ímpar com transposição (1/2) é uma variante do bubble-sort opera em duas fases alternadas: Fase-par: os processos par trocam números com os seus vizinhos direitos. Fase-ímpar: os processos ímpar trocam números com os seus vizinhos direitos. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 10 / 25
Par-Ímpar com transposição (2/2) Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 11 / 25
Algoritmo paralelo - Par-Ímpar com transposição void ODD-EVEN-PAR(n) { id = process label for (i= 1; i<= n; i++) { if (i é ímpar) if (id for ímpar) compara-e-troca-min(id+1); else compara-e-troca-max(id-1); if (i é par) if (id for par) compara-e-troca-min(id+1); else compara-e-troca-max(id-1); } } Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 12 / 25
Mergesort (1/2) Exemplo de um algoritmo divide-and-conquer Método de ordenação em que para ordenar um vector, subdivide-o em duas partes, aplica novamente o método a cada uma das partes e quando estas estiverem ordenadas (2 vectores ordenados) com m e n elementos, faz-se a junção para produzir um vector ordenado que contém os m + n elementos do vector inicial. A complexidade é, em média, O(n log n). Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 13 / 25
Mergesort em paralelo (2/2) Usando uma atribuição de trabalho a processos em árvore. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 14 / 25
Quicksort em paralelo Usando uma atribuição de trabalho a processos em árvore. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 15 / 25
Problemas com a alocação de processos em árvore a divisão inicial inicia-se com apenas um processo, o que é logo limitador. no quicksort, em geral a árvore de processos não será balanceada selecção do pivot é muito importante para que possa ser eficiente. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 16 / 25
Odd-Even mergesort complexidade: O(log 2 n) junção de duas listas a 1, a 2,..., a n e b 1, b 2,..., b n, onde n é uma potência de 2. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 17 / 25
Odd-Even mergesort Aplicar recursivamente odd-even merge: Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 18 / 25
Bitonic Sort (1/7) complexidade: O(log 2 n) uma sequência é bitónica se contém duas sequências, uma crescente e outra decrescente, i.e. a 1 < a 2 <... < a i 1 < a i > a i+1 > a i+2 >... > a n para algum i t.q. (0 i n) uma sequência é bitónica se a propriedade descrita for conseguida por rotação circular para a direita dos seus elementos. Exemplos: Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 19 / 25
Bitonic Sort (2/7) Característica especial das sequências bitónicas: se fizermos a operação comparar-e-trocar com os elementos a i e a i+n/2, para todo o i, numa sequência de tamanho n, obtemos duas sequências bitónicas, em que os números de uma sequência são todos menores que os da outra sequência. Exemplo: começamos com a sequência 3, 5, 8, 9, 7, 4, 2, 1 e obtemos: Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 20 / 25
Bitonic Sort (3/7) a operação compara-e-troca desloca valores menores para a esquerda e maiores para a direita. dada uma sequência bitónica, aplicando recursivamente estas operações obtemos uma lista ordenada. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 21 / 25
Exemplo Bitonic Sort (4/7) Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 22 / 25
Bitonic Sort (5/7) Para ordenar uma sequência não ordenada juntar sequências em sequências bitónicas maiores, começando com pares de números adjacentes, alternando monotonicidade. e no final, a sequência bitónica é ordenada numa única sequência crescente. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 23 / 25
Bitonic Sort (6/7) Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 24 / 25
Bitonic Sort (7/7) Sequência não ordenada sequência bitónica sequência ordenada. Fernando Silva (DCC-FCUP) Algoritmos Paralelos - ordenação 25 / 25