Sortowanie Merge

sortowanie Merge jest dobrze równoległe dzięki zastosowaniu metody divide-and-conquer. Na przestrzeni lat opracowano kilka różnych równoległych wariantów algorytmu. Niektóre algorytmy sortowania równoległego scalania są silnie związane z sekwencyjnym algorytmem scalania z góry na dół, podczas gdy inne mają inną ogólną strukturę i używają metody łączenia K-way.

sortowanie scalające z rekurencją równoległąedytuj

Sekwencyjna procedura sortowania scalającego może być opisana w dwóch fazach, w fazie dzielenia i w fazie scalania., Pierwsza składa się z wielu wywołań rekurencyjnych, które wielokrotnie wykonują ten sam proces podziału, dopóki kolejne nie zostaną trywialnie posortowane (zawierające jeden lub żaden element). Intuicyjnym podejściem jest równoległość tych wywołań rekurencyjnych. Następujący pseudokod opisuje sortowanie scalające z rekurencją równoległą za pomocą słów kluczowych fork I join:

algorytm ten jest trywialną modyfikacją wersji sekwencyjnej i nie jest dobrze równoległy. Dlatego jego przyspieszenie nie jest zbyt imponujące., Ma rozpiętość Θ (n) {\displaystyle \Theta ( n)}, która jest tylko ulepszeniem Θ (log ⁡ n) {\displaystyle \ Theta (\log n)} w porównaniu do wersji sekwencyjnej (Patrz Wprowadzenie do algorytmów). Wynika to głównie z metody sekwencyjnego łączenia, ponieważ jest wąskim gardłem równoległych egzekucji.

sortowanie scalające z mergowaniem równoległymedytuj

Główny artykuł: algorytm scalający § łączenie równoległe

lepszą równoległość można osiągnąć za pomocą algorytmu scalania równoległego. Cormen et al. przedstawia wariant binarny, który łączy dwa posortowane pod sekwencje w jedną posortowaną sekwencję wyjściową.,

w jednej z sekwencji (dłuższej o nierównej długości) zaznaczany jest element indeksu środkowego. Jego pozycja w drugiej sekwencji jest określona w taki sposób, że sekwencja ta pozostanie posortowana, jeśli element ten zostanie wstawiony w tej pozycji. Wiadomo więc ile innych elementów z obu sekwencji jest mniejszych i można obliczyć położenie wybranego elementu w sekwencji wyjściowej. Dla częściowych sekwencji mniejszych i większych elementów utworzonych w ten sposób, algorytm scalania jest ponownie wykonywany równolegle, aż do osiągnięcia podstawowego przypadku rekurencji.,

poniższy pseudokod pokazuje zmodyfikowaną metodę sortowania równoległego łączenia za pomocą algorytmu scalania równoległego (przyjętego z Cormen et al.).

aby przeanalizować relację powtarzania dla najgorszego zakresu, rekurencyjne wywołania parallelMergesort muszą być włączone tylko raz ze względu na ich równoległe wykonanie, uzyskując

szczegółowe informacje na temat złożoności procedury łączenia równoległego, patrz algorytm scalania.,

rozwiązanie tego nawrotu jest podane przez

t ∞ sort = Θ ( log ⁡ ( N ) 3 ) {\textstyle T_{\infty }^{\text{sort}}=\Theta \left(\log(N)^{3}\right)} .

Parallel multiway merge sortEdit

wydaje się arbitralne ograniczenie algorytmów sortowania merge do binarnej metody merge, ponieważ zwykle są p> 2 procesory dostępne. Lepszym rozwiązaniem może być użycie metody K-way merge, uogólnienia binarnego merge, w której K {\displaystyle K} sortowane sekwencje są scalane razem., Ten wariant scalania dobrze nadaje się do opisu algorytmu sortowania na wózku PRAM.

podstawowy IdeaEdit

równoległy proces mergesort na czterech procesorach t 0 {\displaystyle t_{0}} do T 3 {\displaystyle t_{3}} .

Multisequence selectionEdit

PseudocodeEdit

poniżej podano pełny pseudokod algorytmu sortowania równoległego wieloway merge., Zakładamy, że przed i po wyborze multisequence zachodzi synchronizacja barierowa, taka, że każdy procesor może prawidłowo określić elementy dzielące i partycję sekwencyjną.

Analizaedytuj

praktyczna adaptacja i zastosowanieedytuj

algorytm sortowania wieloway merge jest bardzo skalowalny dzięki wysokiej możliwości równoległości, co pozwala na korzystanie z wielu procesorów. To sprawia, że algorytm jest realnym kandydatem do sortowania dużych ilości danych, takich jak te przetwarzane w klastrach komputerowych., Ponadto, ponieważ w takich systemach pamięć zwykle nie jest zasobem ograniczającym, wada złożoności przestrzeni sortowania scalonego jest znikoma. Jednak w takich systemach ważne stają się inne czynniki, które nie są brane pod uwagę przy modelowaniu na wózku. W tym przypadku należy wziąć pod uwagę następujące aspekty: hierarchię pamięci, gdy dane nie mieszczą się w pamięci podręcznej procesorów, lub koszty komunikacji związane z wymianą danych między procesorami, co może stać się wąskim gardłem, gdy dane nie będą już dostępne za pośrednictwem pamięci współdzielonej.

, zaprezentowali w swojej pracy masowy synchroniczny algorytm równoległy dla wielopoziomowych mergesort, który dzieli procesory p {\displaystyle P} na grupy R {\displaystyle r} wielkości P '{\displaystyle p'}. Wszystkie procesory najpierw sortują lokalnie. W przeciwieństwie do jednopoziomowych mergesort, sekwencje te są następnie dzielone na części r {\displaystyle r} i przypisywane do odpowiednich grup procesorów. Kroki te są powtarzane rekurencyjnie w tych grupach. Zmniejsza to komunikację, a zwłaszcza unika problemów z wieloma małymi wiadomościami., Hierarchiczna struktura bazowej sieci rzeczywistej może być używana do definiowania grup procesorów (np. szafy, klastry,…).

dalsze Wariancjeedit

sortowanie scalające było jednym z pierwszych algorytmów sortowania, w którym osiągnięto optymalną prędkość. Inne wyrafinowane algorytmy sortowania równoległego mogą osiągnąć te same lub lepsze granice czasowe z niższą stałą., Na przykład, w 1991 David Powers opisał równoległy quicksort (i pokrewny radix sort), który może działać w czasie o(log n) na maszynie CRCW parallel random-access machine (PRAM) z n procesorami, wykonując partycjonowanie w sposób niejawny. Powers dalej pokazuje, że pipelined wersja Batcher ' s Bitonic Mergesort w czasie O ((log n)2) w sieci sortowania motyli jest w praktyce faktycznie szybciej niż jego o (log n) sortuje na wózku, i dostarcza szczegółowe omówienie ukrytych kosztów ogólnych w porównaniu, radix i równoległego sortowania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przejdź do paska narzędzi