====== Cvičení ====== Na cvičeních opakujeme nejdůležitější věci z přednášek a především zkoušíme paralelní programování v praxi. K programování je možné využít buď počítače v učebnách, nebo svoje vlastní laptopy. **V každém případě je potřeba se na to připravit již před prvním cvičením!** Je potřeba mít připravený C++ toolchain, a nějaké vývojové prostředí. ===== Počítače v učebnách ===== Pro přihlášení na počítače v učebnách je nejprve (pokud jste tak již neučinili) nutné si vygenerovat heslo do učebny (viz [[https://www.felk.cvut.cz/]]). Následně se přihlásíte tímto heslem a ČVUT loginem bez domény. C++ toochain je zde připraven. Jako vývojové prostředí je nainstalovaný CLion. Pro spuštění CLionu použijte: ''/opt/clion-2021.2.1/bin/clion.sh'' ===== Vlastní počítače ===== Pro programování na cvičeních je také možné využít vlastní počítače. Tam si ale musíte toolchain i vývojové prostředí sami nainstalovat a před cičením otestovat, že vám všechno funguje. **Oficiálně podporované compilery jsou GCC 11 a Clang 12 a novější** (je nutná podpora C++20, OpenMP 4 a ''std::experimental::simd''). MSVC a MinGW **nejsou** podporované, na Windows doporučujeme použít WSL2 (pak vás může zajímat [[https://www.jetbrains.com/help/clion/how-to-use-wsl-development-environment-in-clion.html|návod na použití WSL v CLionu]]). Jako vývojové prostředí doporučujeme CLion, na kterém vše testujeme, ale v principu by měl fungovat jakýkoliv editor, pokud podporuje CMake projekty. ==== Linux / WSL ==== Pokud používáte Linux, at už nativně nebo ve WSL, ověřte si prosím před cvičením, že máte aktuální verzi distribuce i všech balíčků. Specificky na Ubuntu je potřeba alespoň Ubuntu 22.04 – pokud máte Ubuntu 20.04 (viz ''lsb_release -a''), je nutné před cvičením updatovat (buď v GUI, nebo zavoláním příkazu ''sudo do-release-upgrade'' a následně dvojice příkazů ''sudo apt update && sudo apt dist-upgrade''). Na WSL také updatujte samotné WSL pomocí příkazu ''wsl --update'' (je třeba volat z Windows, nikoliv z WSL). ==== MacOS ==== Pokud používáte MacOS (Apple silicon), pak můžete OpenMP nainstalovat takto: - Instalace package manageru ''brew'' pro MacOS: ''$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'' - Instalace ''llvm'': ''$ brew install llvm'' - Nalezení cesty ke kompilátoru ''clang'' (clang je kompilátor využívaný llvm a defaultně obsahuje OpenMP [[https://llvm.org/]]): Potřebujeme najít ''clang'', který si nainstaloval ''brew''. Cesta by tedy měla vypadat nějak takto ''/opt/homebrew/Cellar/llvm/15.0.7_1/bin/clang''. - Cesty k ''clang'' zadáme do CLionu. Hlavně si vše otestujte ještě před cvičením, z časových důvodů **není možné na cvičeních řešit, proč se vám kód ke cvičením nezkompiluje, proč vám nejde spustit Clion, apod.** ===== Licence JetBrains ===== Jako studenti máte nárok zdarma používat produkty JetBrains. s těmito prostředími (CLion, IDEA) můžete pracovat také na PDV, jsou nainstalované v učebnách, a budete na nich skládat praktickou zkoušku. Licenci je ale třeba aktivovat: [[https://download.cvut.cz/jetbrains/]] ===== Rozvrh cvičení ===== Formulář na zpětnou vazbu z jednotlivých cvičení: [[https://forms.gle/q6dTqGkjFfMdKMTr5|google form]] [[ https://intranet.fel.cvut.cz/cz/education/rozvrhy-ng.B232/public/html/predmety/47/02/p4702806.html | Rozvrh předmětu.]] ^ ^ Datum ^ Téma cvičení ^ Prezentace ^ Materiály ke cvičení ^ Zadání úloh ^ | **1** | 21.-22.02.2024 | Organizace předmětu a seznámení se s paralelizací | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/01.pdf|01.pdf]] | [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/01-intro.zip|01-intro.zip]] \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/01-intro-solution.zip|01-intro-solution.zip]] \\ {{courses:b4b36pdv:tutorials:decrypt_data.zip}} | | | **2** | 28.-29.02.2024 | Vlákna a přístup ke sdílené paměti | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/02.pdf|02.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_02.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_02solved.zip|tutorial_02.zip (řešené)}} \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/02-cpp-threads.zip|02-cpp-threads.zip]] \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/02-cpp-threads-solution.zip|02-cpp-threads-solution.zip]] | [[courses:b4b36pdv:tutorials:hw_01|1. domácí úloha]] | | **3** | 06.-07.03.2024 | OpenMP | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/03.pdf|03.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_03.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_03solved.zip|tutorial_03.zip (řešené)}} \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/03-openmp.zip|03-openmp.zip]] \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/03-openmp-solution.zip|03-openmp-solution.zip]] | [[courses:b4b36pdv:tutorials:hw_02|2. domácí úloha]] \\ [[https://forms.gle/faCt4aigFxp1RGDr9|quiz]] | | **4** | 13.-14.03.2024 | Konkurentní datové struktury | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/04.pdf|04.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_04.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_04solved.zip|tutorial_04.zip (řešené)}} | [[courses:b4b36pdv:tutorials:hw_03|3. domácí úloha]] \\ [[https://forms.gle/iWVGs7AkhXx1e8ceA|quiz]] | | **5** | 20.-21.03.2024 | Dekompoziční techniky | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/05.pdf|05.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_05.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_05solved.zip|tutorial_05.zip (řešené)}} \\ /* [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/05-openmp2.zip|05-openmp2.zip]] /* /* \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/05-openmp2-solution.zip|05-openmp2-solution.zip]] /* | [[courses:b4b36pdv:tutorials:hw_04|4. domácí úloha]] \\ [[https://forms.gle/z88aBU28zekVNXfv6|quiz]] | | **6** | 27.-28.03.2024 | Řadící algoritmy | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/06.pdf|06.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_06.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_06_solution2024.zip|tutorial_06_solution2024.zip (řešené)}} | [[courses:b4b36pdv:tutorials:hw_05|5. domácí úloha]] \\ [[https://forms.gle/YFFKYMnQhLQeEorD7|quiz]] | | **7** | 03.-04.04.2024 | Vektorizace | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/07.pdf|07.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_07.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_07solved.zip|tutorial_07.zip (řešené)}} \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/07-simd.zip|07-simd.zip]] \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/07-simd-solution.zip|07-simd-solution.zip]] | [[https://forms.gle/YGT42SBWmYW4s87HA|quiz]] | | **8** | 10.-11.04.2024 | Prohledávání stavového prostoru. Paralelní maticové operace | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/08.pdf|08.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_08.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_08solved.zip|tutorial_08.zip (řešené)}} \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/08-sparse-matrix.zip|08-sparse-matrix.zip]] \\ [[https://pdv.pages.fel.cvut.cz/pdv-private/labs/08-sparse-matrix-solution.zip|08-sparse-matrix-solution.zip]] | [[courses:b4b36pdv:tutorials:sem1|1. semestrální práce]] | | **9** | 17.-18.04.2024 | Úvod do distribuovaných výpočtů | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/09.pdf|09.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_09.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_09solved.zip|tutorial_09.zip (řešené)}} | | | **10** | 24.-25.04.2024 | Detekce selhání v DS. Skalární logické hodiny | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/10.pdf|10.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_10.zip}} \\ {{courses:b4b36pdv:tutorials:tutorial_10solved.zip|tutorial_10.zip (řešené)}} | [[courses:b4b36pdv:tutorials:hw_06|6. domácí úloha]] \\ [[https://forms.gle/gVdyg8d3S2xcWy5dA|quiz]] | | **11-12** | 02. 05. 2024 (Čt - čtvrteční rozvrh), 09.05.2024 ([[ https://intranet.fel.cvut.cz/cz/education/harmonogram.html |Čt - středeční rozvrh]]) | Vektorové logické hodiny. Vzájemné vyloučení v DS | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/11.pdf|11.pdf]] | {{courses:b4b36pdv:tutorials:tutorial_11.zip}} /* {{courses:b4b36pdv:tutorials:tutorial_11solved.zip|tutorial_11.zip (řešené)}} /* | [[courses:b4b36pdv:tutorials:hw_07|7. domácí úloha]] \\ [[https://forms.gle/dAzxc2qtpNHPxhbq8|quiz A]] \\ [[https://forms.gle/P6CudTfxBuw5mT9i7|quiz B]] | | **13** | 15.-16.05.2024 | Konsenzus v DS. Algoritmus RAFT | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/12.pdf|12.pdf]] | | [[courses:b4b36pdv:tutorials:sem2|2. semestrální práce]] | | **14** | 22.-23.05.2024 | Globální stav distribuovaného systému | [[https://github.com/aicenter/PDV-tutorials/releases/download/v0.0.1/13.pdf|13.pdf]] | /* {{courses:b4b36pdv:tutorials:tutorial_13.zip}} /* /* {{courses:b4b36pdv:tutorials:tutorial_13solved.zip|tutorial_13.zip (řešené)}} /* | |