Table of Contents

B4B36PDV – Paralelní a distribuované výpočty

Obecné informace

Důležité odkazy

Hodnocení předmětu

Celkově můžete získat maximálně 100 bodů z předmětu a získat známku A-F (<50b = F, 50-59 = E, …, 90-100 = A). Předmět se skládá ze dvou tématických bloků a body můžete získat za vypracování semestrálních úloh a za zkoušku:

Zkoušky

Vzhledem k tomu, že dle informací studijního není možné zkoušku ze 2 častí spravovat pomocí KOSu, tak zápis na praktickou část zkoušky z PDV (paralelní implementace jednoduchých úloh) bude proveden externě pomocí Google Forms.

Link: https://forms.gle/cYQhXMz4A6vVvD1a9

Pro vyplnění formuláře je nutno se přihlásit. Formulář můžete vyplnit jen jednou, svojí odpověď však můžete změnit a tedy se přehlásit na jiný termín. Přihlašování/odhlašování na daný termín končí 48 hodin před začátkem daného termínu, kdy z aktuálně přihlášených uděláme platný seznam na danou zkoušku, pozdější změna nebude akceptována (při vyplnění formuláře je uchováván čas).

Aktuální zaplněnost termínů lze vidět po odeslání formuláře kliknutím na „předchozí odpovědi“, nicméně formulář automaticky nezneplatňuje termíny po jejich naplnění, takže si toto musíte ohlídat sami. Dle dostupných místností je kapacita termínu typicky 44 (místnosti 307, 310, 311, 328) a tedy prvních 44 studentů (dle času odeslání) bude přihlášeno.

Pokud si nejste jisti, jestli jste zapsáni (např. jste se přehlašovali a kapacita se zvýšila nad limit), napište e-mail na bosansky@fel.cvut.cz.

Termíny:

Praktická zkouška bude trvat (maximálně) 3 hodiny.

Pravidla zkoušky :

Vzhledem k tomu, že zadání zkoušky bude naprogramování 2 menších jednodušších úkolů, které vycházejí z úkolů probíraných na přednášce a cvičení, nemůžete během zkoušky používat žádné vlastní připravené kódy ani materiály. K dispozici bude standardní linux desktop s vývojovým prostředím CLion. K dispozici bude přístup na tyto webové stránky s referencemi na C++ (en.cppreference.com) a vektorové instrukce (software.intel.com/sites/landingpage/IntrinsicsGuide/) a taky dokumentaci k OpenMP (z openmp.org).

K dispozici budete mít lokálně binární kód se vzorovým řešením pro porovnání škálovatelnosti, odevzdávání a automatická evaluace bude prostřednictvím systému (ne BRUTE) se stejnou HW konfigurací.

Příklad zkoušky z minulého roku

* Upozornění *
Váš kód musí být korektní z hlediska vícevláknového přístupu ke sdíleným proměnným. 
Pokud nezabezpečíte synchronizaci, budeme Vaše řešení ručně penalizovat.

Úloha 1:
Vaším úkolem je v daném poli std::vector<std::string> vector projít slova a zjistit, 
jaká je Levenshteinho vzdálenost každých dvou slov v tomto poli obsažených. Zároveň 
musíte najít i nejnižší index dvojice slov takový, že vzdálenost mezi těmito slovy 
je největší.

Zparalelizujte metodu distances (pouze tuto metodu, zadnou jinou) v souboru 
levenshtein.cpp, která vrátí sumu vzdáleností slov ve vector každého s každým. 
Index s maximální vzdáleností uložte do proměnné maxIdx. 

Úloha 2:
Vaším úkolem je paralelizovat aplikaci lokálního filtru ve čtvercové matici čísel 
na základě čtyř-okolí prvku. Filtr se aplikuje v iteracích, přičemž v každé iteraci 
se pro každý prvek table(i,j) aplikuje výpočet:

table(i,j) = sqrt( (table(i,j)^2 + table(i-1,j)^2 + table(i+1,j)^2 + table(i,j-1)^2 + table(i,j+1)^2)/3 )

sekvenčně od prvku 0,0 po řádcích (pokud prvky v okolí přesahují index matice, použije se hodnota 0).
Zparalelizujte metodu filtering v souboru filter.cpp, která tento výpočet provádí.

Balíček je možné stáhnout zde.

Teoretický termín

Na teoretický termín se můžete zapisovat klasicky pomocí KOSu, písemka bude trvat 90 minut, bude se skládat převážně z distribuované části, ale bude tam menší část i z paralelní části.