130 likes | 259 Views
Paralelní programování. Inspirace. Bucket -sort. Algoritmus přirozeně paralelní – přirozené rozdělování, segmentace, rozkládání Předpoklady: čísla jsou ve známém intervalu nap ř. čísla jsou v cílovém intervalu rovnoměrně distribuovaná Interval se rozdělí do m stejně velkých intervalů
E N D
Paralelní programování Inspirace
Bucket-sort • Algoritmus přirozeně paralelní – přirozené rozdělování, segmentace, rozkládání • Předpoklady: • čísla jsou ve známém intervalu • např. • čísla jsou v cílovém intervalu rovnoměrně distribuovaná • Interval se rozdělí do m stejně velkých intervalů • každé číslo je umístěno do správného kyblíku
Bucket-sort sekvenčně • Velikost kyblíku jepři rovnoměrném rozdělení • Umístění čísla do kyblíku – jedna operace • Co s kyblíkem? • třeba quicksort – • Optimistický odhad:
Bucket-sort paralelně • Pro každý kyblík použijeme jeden procesor • dobře škálovatelné • Varianty • Jeden procesor rozdělí na začátku práci • zpoždění n • Každý procesor si vybere svá čísla • nadbytečná porovnávání • Každý procesor si vybere svá čísla a vymaže je ze seznamu – blokují se • Partitioning
Quicksort • Podobný • seznam se dělí podle jednoho prvku • pro druhý seznam se použije další procesor • je třeba se rozhodnout jestli ještě má smysl posílat zprávu dalšímu procesoru • seznamy nejsou stejně velké • špatná škálovatelnost • není moc vhodné
Rozděl a panuj • rozdělení úlohy na pod-úlohy, které jsou řešeny nezávisle • split a merge • počet úloh je závislý na způsobu dělení a slučování • rozdělení děláme jen pokud je to účelné • úlohy jsou přibližně stejně velké • úloh je dostatek pro procesory • rozdělení nezabere více času než přímé zpracování
Vyplatí se to? • Čas zaslání zprávy: • n – počet datových jednotek • – latence, zaslání prázdné zprávy • Předpokládáme stejně výkonné prvky, stejné cesty, … • BigO notace je zrádná
Příklad • Startup timezaslané zprávy je 1s • Výkon procesoru je 100 GFLOPS (Intel i7) • Jedná zpráva musí generovat alespoň 100 000 FP operací! • n ≈ 23 000 • latency hiding: • nb send • parallel slackness
Příklad 2 • Suma n čísel a dva procesory, jeden procesor má všechny čísla. • Postup • procesor 1 zašle n/2 čísel procesoru 2 • oba procesory spočítají sumu souběžně • procesor 2 zašle výsledky procesoru 1 • procesor 1 sečte částečné sumy do celkového výsledku • kroky 2 a4
Příklad 2 • kroky1 a 3 • Časová složitost – • Komunikační složitost – • Celková časová složitost –
Výsledek • Pokud je komunikační a výpočetní časová složitost stejná • algoritmus bude neefektivní • zvyšování n asi vůbec nepomůže • Časová složitost výpočtu musí být vyšší než časová složitost komunikace • Optimální rozložení • PC * NP = ST • rozdělené na n procesorů s • rozdělené na procesorů s O(1)
Zasílání zpráv • Synchronní (blokující): • send(data, dest) • vrátí se až v okamžiku, kdy je zpráva celá doručena • recv(data, source) • vrátí se až v okamžiku, kdy je zpráva celá přijata • kroky: • požadavek na zaslání dat • potvrzení • zaslání dat • rendez-vous
Zasílání zpráv • Asynchronní (neblokující): • send(data, dest) / post() • vrátí se až v okamžiku, kdy je zpráva uložena do bufferu • recv(data, source) • vrátí se až v okamžiku, kdy je v bufferu zpráva • kroky: • zaslání dat • počkání na data • příjem dat • producent-konzument