|
2 weeks ago | |
---|---|---|
linux | 2 weeks ago | |
windows | 2 weeks ago | |
.gitignore | 4 weeks ago | |
README.md | 2 weeks ago |
README.md
IPA projekt 2024
Cíl projektu
Cílem projektu je optimalizovat algoritmus pro výpočet vln na vodě. Tento algoritmus je implementován v souboru Ocean.cpp
, konkrétně ve funkci updateVertices
a jejích volaných funkcích. Vaším úkolem bude vytvořit optimalizovanou verzi této funkce pomocí SSE, AVX nebo AVX2.
Kód můžete implementovat pomocí intrinsic funkcí (změňte v Ocean.h
makro ASM_TYPE
na INTRINSIC
) nebo čistě v GCC inline assembly v souboru xlogin00.s
(změňte ASM_TYPE
na CLEAR_ASM
). Pokud použijete intrinsic funkce, budete řešit zadání v jednodušší variantě, a projekt bude hodnocen přísněji.
Struktura dat
V konstruktoru třídy Ocean
se definují jednotlivé složky finální vlny, které se ukládají do C++ vektoru. Jednotlivé vlny se pak skládají do jednoho celku, přičemž s rostoucím počtem složek se zvyšuje i výpočetní náročnost.
Váš projekt by měl podporovat 1 až N složek. Každá jednotlivá vlna (složka) je definována pomocí následující struktury:
struct GerstnerWave {
float amplitude; // Amplituda vlny (výška)
float wavelength; // Vlnová délka (vzdálenost mezi hřebeny)
float speed; // Rychlost vlny
glm::vec2 direction; // Směr vlny (normalizovaný 2D vektor v XZ rovině)
float phase; // Fázový posun
};
Tuto strukturu si můžete libovolně upravit a předat funkci například jako pole strutkur.
Dokumentace
V dokumentaci podrobně popište postup optimalizace. Pro lepší přehlednost můžete využít:
- Blokové diagramy
- Popisy klíčových částí kódu
- Vysvětlení způsobu zpracování dat
Na závěr uveďte dosažené zrychlení. Pokud projekt provádíte v několika iteracích, uveďte výkon pro jednotlivé verze.
Ovládání loďky
Ačkoliv to není z hlediska projektů tohoto zadání potřeba, loďku na vlnách můžete ovládat pomocí ASWD a kameru na povrch vody pomocí pravého tlačíka myši.
Odevzdání
Odevzdávat budete následující soubory:
Ocean.cpp
Ocean.h
xlogin00.s
dokumentace.pdf
Použití velkých jazykových modelů (ChatGPT, ....).
Během řešení projektu můžete využít jazykové modely za následujících podmínek: budou použity pouze na části kódu, danému kódu budete rozumět a v dokumentaci uvedete, k čemu jste jazykový model použili.
Obhajoba
Na poslední cvičení bude obhajoba projektu, cílem je ukázat, že projektu rozumíte a víte, co jednotlivé části kódu dělají. V případě, že nebudete schopni vysvětlit, co váš kód dělá, bude to mít negativní vliv na hodnocení.
Překlad a spuštění
Windows + VS Code
Projekt spusťte ve VS Code z 2. cvičení, které obsahuje všechny potřebné knihovny. Jelikož šablona pro windows obsahuje relativní cesty k root složce archívu, musíte nakopírovat sloužku "windows" projektu do root složky ze cvičení.
Linux
Překlad můžete provádět pomocí Makefile nebo využít VS Code soubory pro spuštění. Na Linuxu je nutné mít nainstalované následující knihovny:
Pro Debian-based OS (Ubuntu, Debian):
sudo apt update
sudo apt install freeglut3-dev libglew-dev libsoil-dev libgl-dev libglu-dev libglm-dev
V případě, že používaté VS Code na linuxu, povolte si v nastavení (Preferences) přidávání breakpoint do neznámých souboru (volba Allow Breakpoints Everywhere).
Bug, bugs,....
Pokud narazíte na problém, napište na goldmann@fit.vutbr.cz.