Merge sort komt goed overeen door het gebruik van de verdeel-en-heers methode. In de loop der jaren zijn verschillende parallelle varianten van het algoritme ontwikkeld. Sommige parallelle merge sort algoritmen zijn sterk gerelateerd aan het sequentiële top-down merge algoritme, terwijl andere een andere algemene structuur hebben en de K-way merge methode gebruiken.
samenvoegen Sorteer met parallelle recursiedit
de sequentiële samenvoegen sorteerprocedure kan in twee fasen worden beschreven, de deelfase en de mergefase., De eerste bestaat uit vele recursieve calls die herhaaldelijk hetzelfde delingsproces uitvoeren totdat de subsequences triviaal gesorteerd zijn (die één of geen element bevatten). Een intuïtieve benadering is de parallellisatie van die recursieve oproepen. Volgende pseudocode beschrijft de merge sort met parallelle recursie met behulp van de fork en join sleutelwoorden:
dit algoritme is de triviale wijziging van de sequentiële versie en parallelliseert niet goed. Daarom is de versnelling niet erg indrukwekkend., Het heeft een overspanning van Θ (n) {\displaystyle \Theta ( n)}, wat slechts een verbetering is van Θ (log n n) {\displaystyle \Theta (\log n)} vergeleken met de sequentiële versie (zie Inleiding algoritmen). Dit is vooral te wijten aan de sequentiële merge methode, omdat het de bottleneck is van de parallelle uitvoeringen.
samenvoegen Sorteer met parallel mergedit
beter parallellisme kan worden bereikt met behulp van een parallel merge algoritme. Cormen et al. presenteer een binaire variant die twee gesorteerde sub-sequenties samenvoegt in een gesorteerde Uitvoerreeks.,
In een van de reeksen (de langere indien ongelijke lengte) wordt het element van de middelste index geselecteerd. Zijn positie in de andere reeks wordt zo bepaald dat deze reeks gesorteerd zou blijven als dit element op deze positie zou worden ingevoegd. Zo weet men hoeveel andere elementen van beide reeksen kleiner zijn en kan de positie van het geselecteerde element in de Uitvoerreeks worden berekend. Voor de partiële sequenties van de kleinere en grotere elementen die op deze manier worden gecreëerd, wordt het merge algoritme opnieuw parallel uitgevoerd totdat het basisgeval van de recursie is bereikt.,
de volgende pseudocode toont de gewijzigde parallel merge sorteermethode met behulp van het parallel merge algoritme (overgenomen van Cormen et al.).
om een herhalingsrelatie te analyseren voor de worst case span, hoeven de recursieve aanroepen van parallelMergesort slechts één keer te worden opgenomen vanwege hun parallelle uitvoering, waarbij
wordt verkregen voor gedetailleerde informatie over de complexiteit van de parallelle merge procedure, zie Merge algorithm.,
de oplossing van deze herhaling wordt gegeven door
t ∞ sort = Θ ( log ( n ) 3 ) {\textstyle T_{\infty }^{\text{sort}}=\Theta \left(\log(n)^{3}\right)} .
Parallel multiway merge sortEdit
Het lijkt willekeurig om de merge sortalgoritmen te beperken tot een binaire merge methode, omdat er meestal p > 2 processors beschikbaar zijn. Een betere benadering kan zijn om een K-way merge methode te gebruiken, een veralgemening van binair merge, waarin K {\displaystyle k} gesorteerde sequenties worden samengevoegd., Deze merge variant is zeer geschikt om een sorteeralgoritme op een kinderwagen te beschrijven.
Basisideedit
het parallelle mergesortproces op meerdere wegen op vier processoren t 0 {\displaystyle t_ {0}} tot t 3 {\displaystyle t_{3}}.
multisequence selectionEdit
PseudocodeEdit
hieronder wordt de volledige pseudocode van het parallel multiway merge sorteeralgoritme gegeven., We gaan ervan uit dat er een barrière synchronisatie is voor en na de multisequence selectie, zodat elke processor de splitsende elementen en de sequentiepartitie goed kan bepalen.
Analysedit
praktische aanpassing en toepassingdit
het algoritme voor het samenvoegen van meerdere wegen is zeer schaalbaar door zijn hoge parallellisatiemogelijkheden, waardoor veel processoren kunnen worden gebruikt. Dit maakt het algoritme een haalbare kandidaat voor het sorteren van grote hoeveelheden gegevens, zoals die verwerkt in computerclusters., Ook, omdat in dergelijke systemen geheugen is meestal niet een beperkende bron, het nadeel van de ruimte complexiteit van merge sort is verwaarloosbaar. Echter, andere factoren worden belangrijk in dergelijke systemen, die niet in aanmerking worden genomen bij het modelleren op een kinderwagen. Hier moeten de volgende aspecten worden overwogen: Geheugenhiërarchie, wanneer de gegevens niet in de processorcache passen, of de communicatie-overhead van het uitwisselen van gegevens tussen processors, die een knelpunt kan worden wanneer de gegevens niet meer via het gedeelde geheugen kunnen worden benaderd.
Sanders et al., hebben in hun paper een bulk synchrone parallel algoritme gepresenteerd voor multilevel multiway mergesort, dat P {\displaystyle p} processors verdeelt in R {\displaystyle r} groepen van grootte p ‘{\displaystyle p’} . Alle processors Sorteren eerst lokaal. In tegenstelling tot single level multiway mergesort, worden deze sequenties vervolgens verdeeld in R {\displaystyle r} delen en toegewezen aan de juiste processor groepen. Deze stappen worden recursief herhaald in die groepen. Dit vermindert de communicatie en voorkomt vooral problemen met veel kleine berichten., De hiërarchische structuur van het onderliggende echte netwerk kan worden gebruikt om de processorgroepen te definiëren (bijvoorbeeld rekken, clusters,…).
verdere VariantsEdit
Merge sort was een van de eerste sorteeralgoritmen waar optimale snelheid werd bereikt, waarbij Richard Cole een slim subsampling-algoritme gebruikte om o(1) merge te garanderen. Andere geavanceerde parallelle sorteeralgoritmen kunnen dezelfde of betere tijdslimieten bereiken met een lagere constante., Bijvoorbeeld, in 1991 beschreef David Powers een parallelized quicksort (en een verwante radix soort) die in o(log n) tijd kan werken op een crcw parallel random-access machine (PRAM) met n processors door partitionering impliciet uit te voeren. Powers laat verder zien dat een pipelined versie van Batcher ‘ s Bitonic Mergesort op o((log n)2) tijd op een vlindersorteernetwerk in de praktijk eigenlijk sneller is dan zijn o(log n) sorteert op een kinderwagen, en hij geeft een gedetailleerde bespreking van de verborgen overheadkosten in vergelijking, radix en parallel Sorteren.