You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.5 KiB
66 lines
2.5 KiB
# 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`).
|
|
|
|
## 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:
|
|
|
|
```cpp
|
|
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`
|
|
|
|
## 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):
|
|
|
|
```sh
|
|
sudo apt update
|
|
sudo apt install freeglut3-dev libglew-dev libsoil-dev libgl-dev libglu-dev
|
|
```
|