|
7 days ago | |
---|---|---|
linux | 7 days ago | |
windows | 7 days ago | |
.gitignore | 7 days ago | |
README.md | 7 days 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
};
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.
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.