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 fcd757ebd1
Added build directories
7 days ago
linux Added build directories 7 days ago
windows Added build directories 7 days ago
.gitignore Updated requirements for Linux 7 days ago
README.md Updated requirements for Linux 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.