Flett sortere

slå sammen sortere parallelizes godt på grunn av bruk av deler-og-hersk-metoden. Flere forskjellige parallelle varianter av algoritmen har blitt utviklet over flere år. Noen parallell fusjonere sortere algoritmer er sterkt knyttet til sekvensiell top-down fusjonere algoritmen, mens andre har en annen generell struktur og bruk K-veis flett-metoden.

slå sammen sorter med parallell recursionEdit

Den sekvensielle fusjonere sortere fremgangsmåten kan beskrives i to faser, dele fase og merge fase., Den første består av mange rekursive kall som gjentatte ganger utføre samme divisjon prosessen til undersekvenser er trivially sortert (som inneholder ett eller ikke-element). En intuitiv tilnærming er parallelization av de rekursive kallene. Følgende pseudocode beskriver merge sorter med parallell recursion bruke gaffel og bli med søkeord:

Denne algoritmen er triviell endring av den sekvensielle versjonen og ikke parallelize godt. Derfor sin speedup er ikke veldig imponerende., Den har et spenn av Θ ( n ) {\displaystyle \Theta (n)} , som er bare en forbedring av Θ ( log ⁡ n ) {\displaystyle \Theta (\log n)} i forhold til den sekvensielle versjonen (se Innledning til Algoritmer). Dette er hovedsakelig på grunn av den sekvensielle flett-metoden, som det er flaskehalsen på den parallelle henrettelser.

slå sammen sorter med parallell mergingEdit

utdypende artikkel: Flett algoritme § Parallell merge

Bedre parallellitet kan oppnås ved hjelp av et parallelt fusjonere algoritme. Cormen et al. presentere en binær variant som fusjonerer to sortert sub-sekvenser i en sortert utgang rekkefølge.,

I en av sekvensene (den lengre hvis ulik lengde), innslag av midt-indeksen er valgt. Sin posisjon i den andre sekvensen er fastsatt på en slik måte at denne sekvensen vil være sortert hvis dette elementet ble satt inn i denne posisjonen. Dermed vet man hvor mange andre elementer fra både sekvenser er mindre og posisjon i det valgte elementet i utdata-sekvens kan beregnes. For delvis sekvenser av mindre og større elementer som er opprettet på denne måten, merge algoritmen er igjen kjøres i parallell til base case av recursion er nådd.,

følgende pseudocode viser endret parallell fusjonere sortere metode som bruker den parallelle fusjonere algoritmen (adoptert fra Cormen et al.).

for å analysere en gjentakelse forhold for de verste fall span, den rekursive samtaler med parallelMergesort har å bli tatt med bare en gang på grunn av sin parallell utførelse, skaffe

For mer detaljert informasjon om kompleksiteten i den parallelle fusjonere prosedyren, se slå sammen algoritme.,

løsningen av denne gjentakelse er gitt ved

T ∞ sorter = Θ ( log ⁡ ( n ) 3 ) {\textstyle T_{\infty }^{\text{form}}=\Theta \left(\log(n)^{3}\right)} .

Parallell flerveis fusjonere sortEdit

Det virker vilkårlig å begrense merge sortere algoritmer til en binær flett-metoden, siden det er vanligvis p > 2-prosessorer tilgjengelig. En bedre tilnærming kan være å bruke en K-veis flett-metoden, en generalisering av binære slå sammen, der k {\displaystyle k} sortert sekvenser er slått sammen., Dette fusjonere variant er godt egnet til å beskrive en sortering algoritme på en BARNEVOGN.

Grunnleggende IdeaEdit

parallell flerveis mergesort prosessen på fire prosessorer t 0 {\displaystyle t_{0}} for å t 3 {\displaystyle t_{3}} .

Multisequence selectionEdit

PseudocodeEdit

Nedenfor, komplett pseudocode av parallelle flerveis fusjonere sortere algoritmen er gitt., Vi antar at det er en barriere synkroniseringen før og etter multisequence utvalget slik at hver prosessor kan bestemme splitting av elementer og sekvensen partisjon som er korrekt.

AnalysisEdit

Praktisk tilpasning og applicationEdit

flerveis fusjonere sortere algoritmen er svært skalerbar gjennom sin høye parallelization evne, som tillater bruk av mange prosessorer. Dette gjør algoritmen en levedyktig kandidat for sortering av store datamengder, for eksempel de som ble behandlet i datamaskinen klynger., Også, siden det i slike systemer minne er vanligvis ikke en begrensende ressurs, ulempen med plass kompleksiteten av merge sorter er ubetydelig. Men andre faktorer blir viktig i slike systemer, som ikke er tatt hensyn til ved modellering på en BARNEVOGN. Her, på følgende forhold må vurderes: Minne-hierarki, der data som ikke passer inn i den prosessorer cache, eller kommunikasjon overhead for utveksling av data mellom prosessorer, som kan bli en flaskehals når data kan ikke lenger nås via delt minne.

Sanders et al., har presentert i sin papir en bulk synkron parallel algoritme for multilevel flerveis mergesort, som deler p {\displaystyle p} prosessorer i r {\displaystyle r} grupper av størrelsen p ‘{\displaystyle p»} . Alle prosessorer sorter lokalt først. I motsetning til enkelt nivå flerveis mergesort, disse sekvensene er deretter delt inn i r {\displaystyle r} deler og tildelt den aktuelle prosessor grupper. Disse trinnene gjentas med undermapper i disse gruppene. Dette reduserer kommunikasjon og spesielt unngår problemer med mange små meldinger., Den hierarkiske strukturen av den underliggende reell nettverk kan brukes til å definere prosessor grupper (f.eks. takstativ, klynger…).

Videre VariantsEdit

slå sammen sortere var en av de første sorterings-algoritmer hvor optimal hastighet opp som var oppnådd, med Richard Cole ved hjelp av en smart subsampling algoritme for å sikre O(1) sammen. Andre avanserte parallelle algoritmer for sortering kan oppnå samme eller bedre tid grenser med en lavere konstant., For eksempel, i 1991 David Krefter beskrevet en parallelized quicksort (og en tilhørende radix sortere) som kan operere i O(log n) tid på en CRCW parallell random-access-maskin (PRAM) med n-prosessorer ved å utføre partisjonering implisitt. Krefter viser videre at en pipelined versjon av Batcher er Bitonic Mergesort på O(log n)2) tid på en sommerfugl sortering nettverk er i praksis faktisk raskere enn hans O(log n) sorterer på en BARNEVOGN, og han gir detaljert diskusjon av skjulte kostnader i sammenligningen, radix og parallell sortering.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Hopp til verktøylinje