Praktický seminář, který přímo navazuje na přednášku Programování v paralelním prostředí, a který se zaměřuje na vybrané pokročilé aspekty paralelního programování.
Cílem je podrobně seznámit studenty praktickou formou s komplikovanějšími problémy v oblasti programování víceprocesorových NUMA serverů a práce s přídavnými paralelními zařízeními, zejména pak GPGPU (CUDA) a Intel Xeon Phi.
Bude předložena řada úloh, které studenti rozeberou společně na cvičení a následně vyzkouší naimplementovat v rámci domácích úkolů. Úlohy budou studentům opraveny a řešení budou podrobena kolektivní diskusi.
Poslední úprava: T_KSI (27.04.2015)
A practical seminar, which is a continuation of Programming in Parallel Environment lectures, focuses on more advanced aspects of parallel programming.
The main objective is to practically introduce more complicated problems to the students regarding programming of multiprocessor NUMA servers and employing additional parallel devices, especially the GPGPUs (CUDA) and Xeon Phi devices.
The students will be given several problems, which will be analyzed during lectures and implemented by the students in their home assignments. The results will be verified and subjected to collective discussion
Poslední úprava: T_KSI (27.04.2015)
Podmínky zakončení předmětu -
Předmět je zakončen zápočtem a zkouškou, zápočet je podmínkou pro přístup ke zkoušce.
Zápočet se uděluje za splnění domácích úkolů ve stanovených termínech. V průběhu semestru budou studenti plnit tři domácí úkoly ze tří nosných témat. Studenti odevzdají svá řešení do fakultního úložiště GitLab a následně si vzájemně provedou code review. V rámci code review mají studenti možnost reagovat na připomínky a opravit svá řešení (počet oprav není omezen, ale očekává se vyřešení všech problémů v daném časovém termínu). Průběh review a oprav je monitorován vyučujícím, který v případě potřeby může do procesu zasáhnout. Na konci semestru bude vypsán finální domácí úkol, který musí studenti splnit před pokusem o zkoušku. Finální úkol vyhodnotí vyučující a v případě nedostatků jej vrátí studentovi k opravě (celkový počet oprav není omezen, ale může být fakticky omezen kapacitou vyučujícího).
Zkouška je ústní s písemnou přípravou. V případě většího počtu studentů si vyučující vyhrazuje možnost hodnotit pouze písemnou přípravu, zejména v případech, kdy jsou informace podané studentem zcela jasné a není třeba dalšího ústního vysvětlení.
Poslední úprava: Kruliš Martin, doc. RNDr., Ph.D. (02.09.2026)
The course is concluded by a course credit and an examination; obtaining the course credit is a prerequisite for taking the examination.
The course credit is awarded for completing the homework assignments by the specified deadlines. During the semester, students will complete three homework assignments covering the three principal topics. Students will submit their solutions to the faculty GitLab repository and subsequently conduct peer code reviews of one another's work. As part of the code review process, students may respond to comments and revise their solutions (the number of revisions is not limited, but all issues are expected to be resolved within the relevant deadline). The instructor monitors the progress of reviews and revisions and may intervene in the process where necessary. A final homework assignment will be announced at the end of the semester; students must complete it before attempting the examination. The final assignment will be evaluated by the instructor and, should deficiencies be identified, returned to the student for revision (the total number of revisions is not limited, but may be effectively constrained by the instructor's capacity).
The examination is oral and includes written preparation. In the event of a larger number of students, the instructor reserves the right to assess the written preparation alone, particularly where the information provided by the student is entirely clear and no further oral explanation is required.
Poslední úprava: Kruliš Martin, doc. RNDr., Ph.D. (02.09.2026)
Sylabus -
Předmět navazuje na předmět „Programování v paralelním prostředí“ (NPRG042) a předpokládá znalosti z něj. Studenti musí být schopni používat jazyk C++ na pokročilé úrovni.
V rámci předmětu se studenti seznámí s třemi pokročilými tématy z oblasti paralelního a distribuovaného programování s důrazem na pochopení detailních aspektů použitých architektur a nízkoúrovňových optimalizací:
1. Algoritmy bez zámků a vlastnosti paměťových modelů moderních CPU
2. Programování pro GPU a optimalizace v CUDA
3. Distribuované programování pro menší clustery s využitím MPI
Témata na sebe volně navazují a z každého z nich je vypracován samostatný domácí úkol. Závěrečný úkol pak vyžaduje spojení alespoň dvou technologií (např. MPI a CUDA) pro dosažení maximálního zrychlení.
Poslední úprava: Kruliš Martin, doc. RNDr., Ph.D. (02.09.2026)
The course builds on the course "Programming in Parallel Environments" (NPRG042) and presupposes knowledge acquired there. Students must be proficient in the C++ programming language at an advanced level.
The course introduces students to three advanced topics in parallel and distributed programming, with an emphasis on understanding the detailed aspects of the underlying architectures and low-level optimizations:
1. Lock-free algorithms and the properties of memory models in modern CPUs
2. GPU programming and optimization in CUDA
3. Distributed programming for smaller clusters using MPI
The topics are loosely interconnected, and each is covered by a separate homework assignment. The final assignment then requires the combination of at least two technologies (e.g., MPI and CUDA) to achieve maximum acceleration.
Poslední úprava: Kruliš Martin, doc. RNDr., Ph.D. (02.09.2026)