====== B4B36PDV – Paralelní a distribuované výpočty ====== ===== Obecné informace ===== * Rozvrh: [[https://intranet.fel.cvut.cz/cz/education/rozvrhy-ng.B232/public/html/predmety/47/02/p4702806.html|Rozvrh B4B36PDV]] * Přednášející: [[http://cs.felk.cvut.cz/en/people/marecjak|Jakub Mareček]], [[http://cs.felk.cvut.cz/en/people/jakobmic|Michal Jakob]] * Cvičící (paralelní část): [[https://dsn.felk.cvut.cz/wiki/lide/macejko|Peter Macejko]], [[kafkamat@fel.cvut.cz|Matěj Kafka]], [[sloukmic@fel.cvut.cz|Michal Slouka]], [[mikhada1@fel.cvut.cz|Daria Mikhaylovskaya]] * Cvičící (distribuovaná část): [[https://dsn.felk.cvut.cz/wiki/lide/macejko|Peter Macejko]], [[http://cs.felk.cvut.cz/en/people/mrkosja1|Jan Mrkos]], [[http://cs.felk.cvut.cz/en/people/milecdav|David Milec]] * Odevzdávání domácích úloh: [[https://cw.felk.cvut.cz/brute/student/|BRUTE]] * Konzultační hodiny: na vyžádání * Komunikace: Oficiální komunikační kanál je e-mail, pro neformální komunikaci lze využít kanál ''#pdv'' na [[https://discord.com/invite/YZjJbkvfaS|fakultním Discord serveru]]. ===== Studijní materiály ===== ==== Paralelní počítání ==== * Standardní učebnice: The Art of Multiprocessor Programming (by Maurice Herlihy, Nir Shavit, Victor Luchangco, and Michael Spear). Vydání z roku 2012 je zdarma dostupné [[https://dl.acm.org/doi/book/10.5555/2385452|on-line]] po přihlášení přes ČVUT SSO, * Příklady ze standardní dokumentace OpenMP v [[https://github.com/OpenMP/Examples/tree/master/sources|C]] i [[https://www.openmp.org/wp-content/uploads/openmp-examples-5-0-1.pdf|PDF]], * Velmi praktické rady: Using OpenMP (Portable Shared Memory Parallel Programming, by Barbara Chapman, Gabriele Jost and Ruud van der Pas), 2007, * Neformální úvod: Programming on Parallel Machines (by Norm Matloff), 2012, k dispozici zdarma [[http://heather.cs.ucdavis.edu/parprocbook|on-line]] ==== Distribuované počítání ==== * Standardní učebnice: Distributed Systems (by Maarten van Steen, Andrew S. Tanenbaum), 3.01 Edition, 2017, k dispozici [[https://www.distributed-systems.net/index.php/books/ds3/|on-line]] * Běžná učebnice: Distributed Systems: Concepts and Design (by George Coulouris Jean Dollimore Tim Kindberg Gordon Blair), 5th Edition), 2011 ===== 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). Body lze získat za domácí úkoly v semestru (celkem maximálně 40b) a ze zkoušek (maximálně 60b). ==== Zápočet: Aktivita v semestru (max 40b) ==== Předmět se skládá ze dvou tématických bloků, body v semestru můžete získat za vypracování semestrálních úloh: * 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ů) * Pro udělení zápočtu je je potřeba získat alespoň **50% bodů, tj. 20 bodů** ze 40. ==== Zkouška (max 60b) ==== * Programovací část zkoušky z paralelní části předmětu (max 20 bodů, pro úspěšné složení nutno získat **alespoň 10b**, započítává se poslední pokus). * Teoretická část zkoušky (max 40 bodů, pro úspěšné složení nutno získat **alespoň 20b**). Při absolvování více úspěšných pokusů se uvažuje maximální dosažený počet bodů. * Pro úspěšné složení zkoušky je nutné úspěšně složit **obě části zkoušky** (tj. programovací i teoretickou zkoušku). ==== Pravidla samostatné práce ==== Při tvorbě úloh se řiďte [[help:common:plagiaty_opisovani|pravidly samostatné práce]]. ===== Zkoušky ===== ==== 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 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 {{ :courses:b4b36pdv:zk_05.zip |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 z otázek z paralelní (15b.) i distribuované (25b.) části. Bude mít formu testu sestávajícího z uzavřených otázek vesměs typu multiple choice, tj. správně libovolný počet možností. V rámci jedné multiple-choice otázky v testu můžete získat mínusové body za špatné odpovědi, ale za jednu otázku je minimální počet bodů 0 (tzn. z testu jako celku není možné dostat záporný počet bodů). ===== Průběh ukončení předmětu ===== Pro úspěšné ukončení předmětu musíte splnit 3 na sobě nezávislé podmínky: {{ :courses:b4b36pdv:ukonceni_v1.3.png?nolink |}}