Paralelizace algoritmu
Single Instruction, Single Data stream (SISD) „tupé“ procesory Single Instruction, Multiple Data streams (SIMD) maticové procesory Multiple Instruction, Single Data stream (MISD) Multiple Instruction, Multiple Data streams (MIMD) běžné procesory distribuované systémy
Systémy se sdílenou pamětí Symetrické – symmetric multiprocessors (SMP) úzkým hrdlem je paměťová sběrnice běžné počítače Nesymetrické – non-uniform memory access (NUMA) paměť je sdílená, ale rozdělená na segmenty – některé jsou blíž a jiné dál princip programování stejný nutné vyhnout se vzdáleným přesunům dat optimálně využívat cache běžné superpočítače
Systémy s distribuovanou pamětí MPP – Massively parallel processors superpočítače Gridy heterogenní clustery nemají centrální bod správy hybridní systémy clustery výpočetních jednotek se sdílenou pamětí superpočítače Clustery homogenní (nebo homogenizované) samostatné výpočetní jednotky
paralelizace algoritmická paralelizace programová zasílaní zpráv management a synchronizace procesů/vláken distribuce dat paralelizace na úrovni kompilátoru direktivy označující paralelní kód
Hledání souběžnosti Návrh/úprava algoritmu Datové a programové struktury Implementace Hledání souběžnosti má vůbec smysl se snažit? co je nejnáročnější? – na co je nutné se zaměřit?
Dekompozice Dekompozice úlohy Dekompozice dat jiný pohled na tutéž věc udělat se musí obojí Analýza a zpracování závislostí Seskupení úloh Určení pořadí Sdílení dat Kontrola
Flexibilita dekompozice by se neměla omezovat na jednu architekturu regulace počtu úloh Efektivita musí dojít ke snížení nároků na paměť nebo čas úloha musí obsahovat dost práce musí být dost úloh, vztah k HW Jednoduchost umožnit ladění a údržbu použití původního sekvenčního kódu
raytracing, CT – medicína i průmysl paprsek vychází ze zdroje a prochází prostředím dochází ke změnám (pohlcení, odrazy, rozptyl) dekompozice každá úloha představuje jeden paprsek jsou skoro nezávislé každý paprsek má k dispozici celé prostředí problém pro distribuovanou architekturu
graf – síť (strom) jednotek vrcholy grafu (molekuly, osoby, auta, …) hrany grafu (vazby, bezpečné vzdálenosti, …) simulace hromadných procesů, metoda KP chování prvku je ovlivněno chováním okolí (prahování) dekompozice úloha pro určení okolních „sil“ na prvek úloha je špatně izolovaná dají se rozlišovat různé druhy sil
identifikace nejnáročnějších částí – práce s největšími objemy dat identifikace nezávislých částí rozklad na segmenty na hranicích segmentů musí docházet k synchronizaci výpočty využívající: pole (matice) – řádky, sloupce, oblasti seznamy, sítě (rekurzivní struktury) – nějaká část
Flexibilita velikost a počet datových jednotek by měl být proměnný a nastavitelný zrnitost (granularity) rozhodující je vliv režie řešení závislostí a manipulace s daty Efektivita jednotky musí být dost a rovnoměrně velké Jednoduchost způsob rozdělení (indexace) globálních dat na jednotky by měl být co nejjednodušší
násobení matic rozdělení na řádky skupiny řádků výsledné matice celá druhá matice mnoho operací čtení, pokud celá matice nevejde do paměti rozložení na bloky
raytracing rozdělení definice prostředí rozdělení na segmenty každá výpočetní jednotka počítá paprsky procházející segmentem na hranici segmentů se synchronizuje se sousedními jednotkami úspora paměti časový problém
graf místo vrcholů a vazeb použijeme: pole souřadnic pole silových vektorů pole sousedů … redukce na maticovou dekompozici
úlohy se stejnými omezeními lze seskupit výpočet prvku matice výpočet polohy buňky výpočet sil působících na buňku … pracujeme jen s omezeným počtem úloh zjednodušení
časová následnost A musí počkat na data z B A musí počkat alespoň na nějaká data z B časová souběžnost A musí počkat na data ze svého okolí okolí se musí provádět souběžně nezávislost – stojí za zaznamenání seřazení úloh musí být úplné abychom se vyhnuli race-condition seřazení úloh nesmí být nadbytečné
způsob sdílení data lokální pro úlohu data globální – sdílená data lokálně sdílená řešení data lokální data pouze pro čtení data pro čtení a zápis akumulace, lineární kombinace, asociativní písař a čtenáři
máme cílovou architekturu? „běžný“ procesor × distribuovaná architektura kolik můžeme teoreticky vyrobit výpočetních jednotek? příklad matice kolik můžeme vyrobit datových segmentů? je možné zátěž rozložit? jaké jsou limitní případy? KISS
paralelizace je orientovaná na úlohy nezávislé (lineární) – Paralelizace úloh závislé (rekurzivní) – Rozděl a panuj paralelizace orientovaná na data nezávislé segmenty – Geometrická dekompozice závislé segmenty – Rekurzivní data paralelizace orientovaná na tok dat řízené statickým tokem dat – Pipeline dynamický tok dat – Událostmi řízené
úlohy jsou maximálně nezávislé a obyčejně statické úlohy se mohou provádět souběžně úloh by mělo být více než výpočetních jednotek ale měly by být dost velké
závislosti žádné pouze mezi skupinami – nezajímavé odstranitelné závislosti – falešné globální proměnné, DB separovatelné závislosti – cykly s asociativními binárními operacemi lze redukovat plánování statické (známé dopředu, přeplněné) × dynamické (work queue, work stealing)
paralelní v cyklu direktiva kompilátoru složitější kód master/worker (dynamický plánovač) single program, multiple data (SPMD)