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.
 
 
 
Tomáš Goldmann 373b6f44f8
Fixed parameter passing logic
2 weeks ago
linux Fixed parameter passing logic 2 weeks ago
windows Fixed parameter passing logic 2 weeks ago
.gitignore Updated requirements for Linux 4 weeks ago
README.md Fixed parameter passing logic 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.