ricip paralelího řazeí vkládáím (meší propadává doprava) Týde 0 aralelí řazeí. vkládáím. traspozicí lichý - sudý. bitoické. s pravidelými vzorky. přihrádkové 0,,,,,,,,,, krok aralelí řazeí vkládáím (Isertio sort) CU CU CU WIE comig iput? ext IF ext > highest output! highest highest : ext TRUE output! ext očet procesů počet klíčů Řazeí po blocích dat, 0 přijme odešle seřadí 0 přijme spojí odešle přijme odešle seřadí přijme spojí -0 odešle přijme odešle seřadí přijme spojí odešle přijme seřadí odešle C, doba příjmu a a odesláí jedé položky Optimálí rozděleí S q q, doba řazeí q položek 0 > >? M, doba spojeí jedé položky čiosti lze překrýt, ideálě by měly trvat stejě dlouho Spojováí seřazeých posloupostí (merge) Spojováí seřazeých posloupostí (.verze) Koečá Spoj oech si vyšší Vrať ižší ižší koečá Spoj zdola do poloviy Spoj shora do poloviy vyšší koečá
aralelí řazeí lichý-sudý krok 0 0 8 8 8 8 8 8 8 8 sudý idex lichý idex recv ( i ) sed( i- ) sed ( i ) recv( i- ) i : recv ( i- ) i : sed ( i ) sed( i- ) recv( i ) Bitoické poslouposti Jsou vytvořey - ze částí, jedé arůstající, druhé klesající - cyklickým posuvem předchozí poslouposti hodota a 0, a,..., a - a 0, a,..., a - orováím a výměou prvků a i a a i/ bitoické poslouposti získáme polovičí bitoické poslouposti. Využití bitoických posloupostí pro řazeí Bitoický mergesort 8 klíčů it 8 9 8 9 8 9 8 9 Bitoická posloupost porováí a výměa bitoické poslouposti porováí a výměa dvouprvkové poslouposti seřazeá posloupost orováí a výměa přesuuje meší doleva a větší doprava. Rekurzivím postupem se prvky seřadí. 00 00 šabloa 0000 8 8 8 8 9 9 9 9 8 9 9 8 8 9 řádek CU; barevé šipky směřují k CU s vyšším klíčem Bitoický mergesort a hyperkostce [/] INT tmpl: -- biárí šabloa (template) 0 00 krok i 00 Komuikující dvojice: 0... vyšší část do vyššího id,... opačě. 0000 šabloa INT z: z : -- hodoty z:,,..,/ i0 FOR -- šablo pro procesorů INT t,w: -- geerováí šabloy tmpl u0 FOR z tmpl[u]:0 -- počátečí vyulováí t:i w:z -- a astaveí WIE t<- -- pro 8: t0, h0 FOR w tmpl[hw]:-tmpl[h] -- komplemet tmpl[h] t:t w:*w OUTSTRM! tmpl[/-],...,tmpl[],tmpl[0] z : *z
klíče 8 9 W řadící síť s moduly merge/split i0 i CU čára jedé i z z barvy z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 step m seřazeé klíče 8 9 Bitoické spojeí seřazeých sekvecí 0 0 0 0 0 00 šabloa Výkoost bitoického mergesortu (EREW) Každý CU: sekvečí Quicksort za kroků Spojeí / položek ( )- krát ( ) za kroků S(, ), ( ) S K E K pro K k θ( ) slabá škálovatelost Rychlejší bitoický mergesort Každý CU: sekvečí Quicksort za kroků Spojeí je/ položek ( )- krát za ( ) kroků; S(, ) E S ( ) K ( )( / ), ( )( / ) K pro ( )( / ) θ(( / ) K škálovatelost o ěco lepší k ) Srováí řadících algoritmů a EREW RAM 00 000 000,, Naiví Bitoický Rychlejší bitoický S E % S E % S E %,9 9,9 9 00, 8, 8,8 9 8,, 89 8, 0 8 0,,, 8, 0 0 0 9 aralelí řazeí pomocí vzorků (SRS) SRS arallel Sortig with Regular Samplig Základí myšleka: Rozděl do segmetů stejé velikosti. Seřaď segmety (apř. použitím u). Obor hodot dat rozděl a itervalů (přihrádek). ech si je jedu přihrádku a z ostatích přihrádek odešli příslušým procesorům (AAS). aralelě spoj ze své a došlých seřazeých přihrádek Klíčový algoritmus je -cesté spojováí. Časová složitost O(/ ()) for >. Údajě ejrychlejší uiverzálí paralelí řazeí.
. Rozděl do segmetů. aralelě seřaď datové segmety. Ze seřazeých datových segmetů vezmi vzorky ve stejých rozestupech. Seřaď vzorky dat 8 9 9 0 8 0 8 9 8 9 0 9 0 8 9 9 0 8 8 9 0 8 9 9 Sekvečí složitost: O() 8 9 9 0 8 0 8 9 8 9 0 9 sekvečíl sekvečíl sekvečíl Sekvečí složitost: O( (/)) 0 8 9 9 0 8 8 9 0 8 9 9 Sekvečí složitost: O( ) Sekvečí složitost: O( ( )) 0 9 0 9 0 9 vzorků sekvečí 0 0 0 9 9 9. Ze seřazeých vzorků dat vyber stejě vzdáleé hraičí prvky. Rozčleň segmety dat do přihrádek. Vypočti velikosti výsledých přihrádek 8. Stejolehlé přihrádky vždy spojí jede procesor vzorky 0 0 0 9 9 9 8 výsledek Sekvečí složitost: O() O( ) 9 raičí (pivotí) prvky 0 8 9 9 0 8 8 9 0 8 9 9 0 8 9 9 0 8 8 9 0 8 9 9 9 9 9 Sekvečí složitost: O( (/)) sekvečí sekvečíl -cestý merge -cestý merge O( ()) ebo O() 0 0 0 sekvečí -cestý merge 8 8 Celková sekvečí a paralelí složitost Sekvečí a paralelí časová složitost -pokrač. Krok : O() - Rozděleí dat do segmetů. Krok : O( (/)) - Seřazeí datových segmetů. Krok: O( ) - Vzorkováí seřazeých datových segmetů. Krok: O( ( )) - Seřazeí vzorků dat. Krok : O() - Volba pivotů ze seřazeých vzorků. Krok: O( (/)) - Rozčleěí seřaz.segmetů do přihrádek. Krok: O( ) - Výpočet velikosti přihrádek. Krok8: O( ()) - Spojeí dat do výsledé kofigurace. O() verze by byla jedodušší. Dva domiatí čley : pokud <<, téměř celý čas se stráví v krocích a 8: Krok: O( (/)) - Řazeí datových segmetů. Krok8: O( () - Spojeí přihrádek dat. ři pevém a, sekv.složitost O( ()). Oba extrémy (, ) dávají O( ()). Celkový efekt závisí a ásobící kostatě. aralelí složitost O( ) O( ) O( )
aralelí řazeí s přihrádkami (bucket sort) Miimálí kostra grafu (Mi. Spaig Tree) Opačé pořadí akcí ež u SRS. Data se rozdělí procesorům po itervalech hodot, teprve pak lokálí řazeí. Základí myšleka: Rozděl po segmetech stejé velikosti procesorům. Obor hodot dat rozděl a itervalů. Každý procesor: roztřídí svoje do přihrádek (itervalů), echá si je jedu přihrádku a z ostatích přihrádek odešle příslušým procesorům (AAS). seřadí ve své přihrádce spolu s daty od kolegů. řihrádky budou obsahovat stejý počet klíčů je při rovoměrém rozložeí hodot výchozích dat. Je dáeorietovaý graf G, hray opatřey vahami. Kostra grafu G je podgraf ve tvaru stromu obsahující všechy uzly. Miimálí kostra je kostra s ejmeším součtem vah svých hra. Sekvečí složitost: O( ) pro uzlů. Uzly grafu jsou rozděley mezi procesory, MST(0) root ; for (i;i<;i) { # tolik kroků, kolik je uzlů (bez src) Všechy procesory: ajdi uzel ejbližší k MST(i-) a zapiš délku cesty do sdíleé paměti; Všichi redukují operací miimum předchozí ejkratší cesty a jedo globálí miimum za kroků; #všichi je budou zát ajedou cpu[0]: aktualizuj MST(i); # zapíše do MST ve sdíleé paměti právě # alezeý uzel ejbližší k MST(i-) barrier(id); } Miimálí kostra grafu (MST) - pokrač. MST() MST() MST() 0 8 MST() MST() MST()