AIM - cvičení

V akademickém roce 2024/2025 vede cvičení z předmětu Martina Mareše Algoritmy a jejich implementace (NDMI074) David Čepelík. Tady najdete podmínky pro zápočet, seznam domácích úkolů a seznam probrané látky.

Cvičení je každou středu od 14:00 v SW1.

Cvičícího můžete kontaktovat e-mailem na adrese d@dcepelik.cz. Konzultace je možno domluvit kdykoli osobně nebo e-mailem.

Zadané úkoly

Kód Zadáno Termín Max. bodů Zadání
bits 31.3. 15 Implementujte všechny bitové triky ze cvičení. Odezvdejte prosím e-mailem (d@dcepelik.cz).
eras 31.3. 30.4. 15 30 Implementujte Eratosthenovo síto: napište program, který na standardním vstupu obdrží celé kladné číslo N a na standardní výstup vypíše počet prvočísel menších nebo rovných N. N se vejde do 64-bitového int-u.

Způsob odezvdávání je popsán níže.

Co se dělo na cvičení

Týden Datum Obsah Materiály, odkazy
1 19.2. Přednáška na cviku (rychlokurz céčka). Přednáší Martin Mareš. Medvědův průvodce po Céčku, záznamy z roku 2021
2 26.2. Přednáška na cviku (rychlokurz céčka). Přednáší Martin Mareš. Medvědův průvodce po Céčku, záznamy z roku 2021
3 5.3. Zbytky z rychlokurzu céčka (GNU rozšíření). Užitečné flagy pro kompilátor, Makefile. Valgrind, GDB a asan. Jak odladit crash v GDB, debuginfo. Sekce ELFu. Čtení jednoduchého programu přeloženého s různými flagy (default, -O1, -02, -fomit-frame-pointer, -funroll-loops). Překládaný program.
4 12.3. Přednáška místo cvičení. Cvičení si nahradíme 26.3., kdy naopak odpadne přednáška. Web přednášky
5 19.3. Cvičení i přednáška odpadá.
6 26.3. Dvě cvičení v SW1, přednáška odpadá. Dvojkový doplněk. (Signed) přetečení a __builtin_<op>_overflow v GCC, calloc, reallocarray. Šest způsobů, jak spočítat popcount. Který je nejrychleší, kdy a proč? Benchmarkování pomocí clock_gettime(2), na co si dát pozor. popcnt.c Godbolt Compiler explorer
7 2.4. Eratosthenovo síto. Naivní iplementace a postupné zrychlování (samostatná práce). Rozmysleli jsme si: Stačí škrtat jen násobky čísel <= ceil(sqrt(n)), není potřeba škrtat tím, co je už škrtnuté. Síto reprezentovat pomocí bitů. Nereprezentovat sudá čísla (tečka tečka). Pracovat v blocích tak, aby aktuálně používaná část síta zůstávala v keši. Pro počítání prvočísel se může hodit jeden bitový trik, který už známe. Použití perf stat -d. perf-stat(1)
8 9.4. Zrychlujeme Eratosthenovo síto.
9 16.4. Vektorová rozšíření. Rychlá orientace. Zrychlujeme naivní programy pomocí ruční vektorizace. Porovnáváme výsledky s naivní verzí a autovektorizací. Zadání úloh. přehled vektorových instrukcí s obrázky, vektorové typy v gcc, gcc builtins, Intel Intrinsics Guide,

Způsob odevzdání domácích úkolů

O čem cvičení bude?

Budeme se soustředit na praktické vyzkoušení si a zvládnutí základních technik souvisejících s implementací výpočetně náročných programů - běžné neefektivní a efektivní programátorské obraty ve vnitřních smyčkách, zkoumání možnosti optimalizace překladačem, způsoby a možnosti profilování, různé možnosti paralelizace a možná něco navíc. Snad se dozvíte i pár programátorských zajímavostí.

Zápočet