Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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:

  • Paralelní výpočty (max 22 bodů):
    • 5 malých programovacích úloh (max 10 bodů)
    • Semestrální práce (max 12 bodů)
  • Distribuované výpočty (max 18 bodů):
    • 2 malé úlohy (max 4 body)
    • Semestrální práce (max 14 bodů)
  • Ze semestru je potřeba získat alespoň 50% bodů, tj. 20 bodů ze 40.
  • Programovací zkouška (max 20 bodů, pro složení předmětu nutno získat alespoň 10b)
  • Teoretická zkouška (max 40 bodů, pro složení předmětu nutno získat alespoň 20b)

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:

  • 30.5.2019, 9:00
  • 7.6.2019, 9:00
  • 7.6.2019, 13:00
  • 27.6.2019, 9:00
  • V termínech 10.6. - 26.6.2019 probíhají na katedře SZZ, možnost využití počítačových učeben na zkoušky je omezená (v případě nutnosti je možnost vypsání jednoho termínu s menší kapacitou v daném období)
  • 1 termín bude v září 2019

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.

courses/b4b36pdv/start.txt · Last modified: 2019/05/24 17:59 by bosanbra