|
| 1 | +Architektury Výpočetních Systémů (AVS 2019) |
| 2 | +Projekt č. 2 (PMC) |
| 3 | +Login: xstupi00 |
| 4 | + |
| 5 | +Úloha 1: Paralelizace původního řešení |
| 6 | +=============================================================================== |
| 7 | + |
| 8 | +1) Kterou ze smyček (viz zadání) je vhodnější paralelizovat a co způsobuje |
| 9 | + neefektivitu paralelizaci té druhé? |
| 10 | + |
| 11 | +1a) |
| 12 | +Vhodnejšie je parelelizovať smyčku vo funkcii `LoopMeshBuilder::marchCubes` v |
| 13 | +porovnaní s druhou smyčkou vo funkcii `LoopMeshBuilder::evaluateFieldAt`. |
| 14 | + |
| 15 | +1b) |
| 16 | +Neefektivita druhej smyčky je spôsobená výrazne väčším overheadom ako je samotný |
| 17 | +prínos paralelizácie danej smyčky. Táto smyčka sa nachádza vo funkcii |
| 18 | +`LoopMeshBuilder::evaluateFieldAt, ktorá je volaná 8x pre každý beh funkcie |
| 19 | +`BaseMeshBuilder::buildCube`, pre každý vrchol kocky raz. Pre každú kocku, tak |
| 20 | +dochádza k vytvoreniu a následnému zrušeniu daného počtu vlákien (napr. 16) až 8x, |
| 21 | +čo práve spôsobuje veľký overhead a tým zhoršenie celkovej výkonnosti programu. |
| 22 | + |
| 23 | +------------------------------------------------------------------------------- |
| 24 | + |
| 25 | +2) Jaké plánování (rozdělení práce mezi vlákna) jste zvolili a proč? |
| 26 | + Jaký vliv má velikost "chunk" při dynamickém plánování (8, 16, 32, 64)? |
| 27 | + |
| 28 | + |
| 29 | +2a) |
| 30 | +Zvolil som dynamický typ plánovania s hodnotou chunk-size=16 (schedule(dynamic, 16)). |
| 31 | +Tento typ plánovania dosahoval pri testovaní rôznych variant o niečo lepšie výsledky |
| 32 | +ako statické plánovanie a v porovnaní s typom `guided` dosahoval takmer rovnaké |
| 33 | +výsledky. Výpočet pre každú kocku trvá približne rovnaký čas, takže môžme povedať, že |
| 34 | +práca je vhodne distribuovaná medzi jednotlivé vlákna už v základe. Malý rozdiel medzi |
| 35 | +statickým a dynamickým plánovaním môže byť spôsobený tým, že v prípadoch, kedy nie sú |
| 36 | +všetky vrcholy kocky pod alebo nad povrchom (povrch pretína kocku) prebieha oproti |
| 37 | +zvyšným iteráciam aj interpolácia vybraných polygónov, čo spôsobí o niečo dlhšie |
| 38 | +trvanie výpočtu v danej iterácií. Takýchto iterácií, v ktorých dochádza k |
| 39 | +interpolácií polygónov, je však z celkového počtu minimum (cca < 8% u bun_zipper_res a |
| 40 | +< 5% u dragon_vrip_res) a preto dynamické plánovanie nespôsobuje väčši rozdiel v tomto |
| 41 | +procese paralelizácie. |
| 42 | + |
| 43 | + |
| 44 | +2b) |
| 45 | +Pri voľbe dynamického plánovania s rôznou hodnotou parametru `chunk-size` som |
| 46 | +nezaznamenal žiadne výrazné zmeny vo výkonnosti programu. |
| 47 | + |
| 48 | +------------------------------------------------------------------------------- |
| 49 | + |
| 50 | +3) Jakým způsobem zajišťujete ukládání trojúhelníků z několika vláken současně? |
| 51 | + |
| 52 | +Použitím pragmy `omp critical` vo funkcii `LoopMeshBuilder::emitTriangle` pred |
| 53 | +uložením daného trojuholníka `BaseMeshBuilder::Triangle_t` do vektora už |
| 54 | +uložených trojuholníkov `LoopMeshBuilder::mTriangles`. Táto pragma identifikuje |
| 55 | +sekcie kódu, ktoré musia byť vykonávané len jedným vláknom v danom čase a |
| 56 | +zabezpečuje tak, že zápis do vektora bude realizovať vždy len jedno vlákno. |
| 57 | +V prípade, že niektoré z vlákien práve realizuje zápis do vektora a súčasne |
| 58 | +iné vlákno má taktiež požiadavku na zápis, bude musieť toto vlákno čakať na |
| 59 | +začiatku kritickej sekcie dokiaľ prvé vlákno nedokončí operáciu zápisu a tým |
| 60 | +vypadne z kritickej sekcie, čím umožní vstup inému vláknu, ktoré čaká na vstupe. |
| 61 | + |
| 62 | + |
| 63 | +Úloha 2: Paralelní průchod stromem |
| 64 | +=============================================================================== |
| 65 | + |
| 66 | +1) Stručně popište použití OpenMP tasků ve vašem řešení. |
| 67 | + |
| 68 | +2) Jakým způsobem jste realizovali sesbírání celkového počtu trojúhelníků? |
| 69 | + |
| 70 | +3) Jaký vliv má na vaše řešení tzv. "cut-off"? Je vhodné vytvářet nový |
| 71 | + task pro každou krychli na nejnižší úrovni? |
| 72 | + |
| 73 | +4) Jakým způsobem zajišťujete ukládání trojúhelníků z několika vláken současně? |
| 74 | + |
| 75 | +Úloha 2: Grafy škálování obou řešení |
| 76 | +=============================================================================== |
| 77 | + |
| 78 | +1) Stručně zhodnoťte efektivitu vytvořených řešení (na základě grafů škálování). |
| 79 | + |
| 80 | +2) V jakém případě (v závislosti na počtu bodů ve vstupním souboru a velikosti |
| 81 | + mřížky) bude vaše řešení 1. úlohy neefektivní? (pokud takový případ existuje) |
| 82 | + |
| 83 | +3) Je (nebo není) stromový algoritmus efektivnější z pohledu slabého škálování |
| 84 | + vzhledem ke vstupu? |
0 commit comments