Studenti se zájmem o mé vedení bakalářské nebo diplomové práce si mohou vybrat z následujících volných témat. Témata jsou záměrně široká, aby bylo možné je upravit dle zájmů studenta.
Můžete mě kontaktovat osobně nebo emailem.
Vývoj knihovny TNL
Template Numerical Library (TNL) je vědecká open-source knihovna vyvíjená na ČVUT v Praze. Je to sada funkcí, objektů a nástrojů, které usnadňují vývoj efektivních numerických řešičů a algoritmů pro vysoce výkonné výpočty. TNL je implementována v jazyku C++ a využívá moderních paradigmat, aby bylo možné poskytnout flexibilní a uživatelsky přívětivé rozhraní. TNL také poskytuje nativní podporu pro moderní hardwarové architektury, včetně vícejádrových procesorů, GPU akcelerátorů a distribuovaných systémů.
Tohle téma je záměrně velmi široké a může být snadno upraveno dle zájmů studenta. Studentský projekt by obecně zahrnoval práci na jedné konkrétní komponentě v knihovně TNL, např. na nějakém algoritmu nebo datové struktuře. V následujícím seznamu je několik příkladů, kde by bylo možné přispět k vývoji TNL:
- porovnání různých knihoven a frameworků pro paralelní programování (C++ vlákna, OpenMP, oneTBB, SYCL, HIP, CUDA)
- vývoj paralelních algoritmů pro vícejádrové procesory and GPU akcelerátory
- vývoj benchmarků a optimalizace vybraných algoritmů
- prostředky pro správu distribuovaných dat
- pokročilé algoritmy pro numerickou lineární algebru (např. řešení soustav lineárních rovnic, rozklady matic, výpočet vlastních čísel a vlastních vektorů)
- implementace numerického řešiče pro efektivní řešení rovnice mělké vody
Požadavky: Studenti musí mít zkušenosti s programováním v C++ (na úrovni předmětů 18PRC1 a 18PRC2 na FJFI).
Výpočetní aspekty mřížkové Boltzmannovy metody
Mřížková Boltzmannova metoda (anglicky lattice Boltzmann method, LBM) je populární metoda pro simulace proudění tekutin, kterou je možné použít pro silně turbulentní proudění a také ji je možné efektivně implementovat pro masivně paralelní architektury, jako např. superpočítače využívající GPU akcelerátory. Náš kód je založen na open-source projektu Template Numerical Library (TNL) a samotná implementace LBM je také dostupná na GitLabu jako open-source modul TNL-LBM.
V rámci své práce budou studenti vedeni týmem zkušených matematiků a programátorů a budou spolupracovat na vylepšování různých částí kódu LBM, jako např.:
- implementace real-time vizualizaci pomocí knihoven ParaView Catalyst a ADIOS2
- implementace pokročilých algoritmů pro krok šíření v LBM (např. esoteric twist, esoteric pull, esoteric push)
- efektivní implementace trikubické interpolace na GPU akcelerátorech
- implementace numerického algoritmu typu time-skewing pro LBM (nebo jinou explicitní numerickou metodu na pravidelné mřížce)
- schémata pro post-processing diskrétního rychlostního pole zajišťující jeho konzervativitu
- optimalizace LBM pomocí přístupů pro smíšenou přesnost (např. použití typu
float
pro ukládání, aledouble
pro výpočty) - použití programu LBMAT pro optimalizaci relaxačních parametrů v různých kolizních operátorech v LBM (matematické téma)
Požadavky: Studenti musí mít zkušenosti s programováním v C++ (na úrovni předmětů 18PRC1 a 18PRC2 na FJFI).
Implementace metody konečných objemů pro polyhedrální sítě a akcelerátory GPU
Knihovna Template Numerical Library (TNL) (viz výše) byla úspěšně použita pro vývoj moderních a efektivních řešičů pro parciální diferenciální rovnice, které jsou založené na moderních numerických metodách, včetně hybridní metody smíšených konečných prvků a mřížkové Boltzmannovy metody. Další populární metodou je metoda konečných objemů (finite volume method), která je vhodná pro mnoho praktických úloh. Jedna z jejích hlavních výhod je to, že ji lze snadno formulovat ve tvaru umožňujícím použití nestrukturovaných sítí, a to včetně obecných polyhedrálních sítí.
Cílem tohoto projektu bude vývoj numerického řešiče založeného na metodě konečných objemů, který bude využívat knihovnu TNL. Začneme s jednoduchou úlohou a postupně budeme řešič vylepšovat pro použití v komplikovanějších úlohách.
Požadavky: Studenti musí mít zkušenosti s numerickou matematikou (na úrovni předmětu 01NMA1 na FJFI) a s diferenciálními rovnicemi (předmět 01DIFR na FJFI). Dále je doporučená zkušenost s programováním v C++ (na úrovni předmětů 18PRC1 a 18PRC2 na FJFI).
Algoritmy pro tvorbu sítí pro numerické simulace
Numerická síť je základní datová struktura pro mnoho numerických metod v přírodních vědách, průmyslu a dalších oborech. Pro aproximaci úloh v komplikované geometrii s dostatečnou přesností je často nutné uvažovat nestrukturované sítě namísto strukturovaných sítí. Proto je nutné umět efektivně vytvářet, ukládat a manipulovat s nestrukturovanými sítěmi v paměti počítače.
Knihovna Template Numerical Library (TNL) (viz výše) poskytuje obecnou datovou strukturu, která umožňuje reprezentovat libovolnou konformní nestrukturovanou síť, včetně polygonálních a polyhedrálních sítí. Cílem tohoto projektu bude další vývoj této datové struktury v určité oblasti, jako např. následující:
- implementace konceptu iterátor ve smyslu standardu C++ pro entity sítě
- implementace algoritmů pro optimalizaci numerických vlastností tetrahedrální sítě
- implementace algoritmů pro optimalizaci numerických vlastností polygonálních a polyhedrálních sítí
- implementace algoritmů pro planarizaci polygonů ve 3D
- implementace algoritmu pro triangulaci polygonální oblasti, např. pomocí Delaunayho triangulace, Bowyer-Watson algoritmu, Seidelova algoritmu, nebo algoritmu nejmenší ceny
Požadavky: Studenti musí mít zkušenosti s programováním v C++ (na úrovni předmětů 18PRC1 a 18PRC2 na FJFI).
Správa systémů pro vysoce výkonné výpočty
Linux je dominantní operační systém pro servery v mnoha oblastech, včetně webových serverů a systémů pro vysoce výkonné výpočty. Jeho open-source povaha a decentralizovaný vývoj nabízí nekonečné možnosti, ale také přináší mnoho výzev. S příchodem moderních technik pro agilní vývoj software došlo k nárůstu popularity kontejnerů, což jsou lehká pseudo-virtualizační řešení, která mohou být použita pro izolaci aplikací a jejich celého prostředí. Použití kontejnerů řeší mnoho přetrvávajících problémů s kompatibilitou mezi softwarovými komponentami a koexistence několika verzí téhož software. Kontejnery také představují ideální nástroj pro nasazení agilních technik continuous integration/continuous delivery a celkově kontejnery zlepšují efektivitu práce vývojářů komplikovaných systémů.
Využití kontejnerů se také stává populárním v systémech pro vysoce výkonné výpočty, které byly oproti jiným oblastem tradičně konzervativnější a více orientované na čistý výkon hardware. V rámci tohoto projektu budeme zkoumat možnosti integrace agilních technik vývoje software s prostředky systémů pro vysoce výkonné výpočty. Prvním krokem bude zorientování se v množství používaných technik a softwarových nástrojů na obou integrovaných stranách, zejména GitLab CI, plánovač úloh Slurm a kontejnerové nástroje Docker a Shifter. Druhým krokem bude konfigurace a nasazení vybraných systémů na fakultních serverech. Posledním krokem bude testování všech systémů a finální vyhodnocení.
Požadavky: Studenti musí mít zkušenosti se skriptováním a programováním v jazycích Python a Bash. Také je potřeba mít zkušenosti s použitím operačního systému Linux na desktopu (laptopu), ale naopak není nutná předchozí znalost serverového prostředí.
Automatizace na platformách pro spolupráci na technickém obsahu
Spolupráce je nejdůležitější lidskou vlastností v týmových sportech, herectví, vládnutí a také ve vývoji software. Posledně zmíněná oblast využívá množství webových služeb, které byly vyvinuty pro lepší organizaci výsledků lidské činnosti a pro usnadnění vzdálené interakce mezi lidmi. Avšak online spolupráce není jen o lidech – často je možné identifikovat mnoho úloh, které lze snadno automatizovat a ušetřit tak cenný lidský čas.
V rámci tohoto projektu se zaměříme na Arch Linux wiki – komunitní platformu, která poskytuje dokumentaci pro distribuci Arch Linux. Budeme zkoumat možnosti, kde je možné automatizovat správu obsahu. Začneme od jednoduchých nástrojů založených na heuristice, poté blíže prozkoumáme možnosti strojového zpracování přirozených jazyků a časem se můžeme dostat až k umělé inteligenci. Některé oblasti, kde by bylo možné uplatnit automatizaci, jsou boj proti linkrotu, detekce nepodepsaných komentářů na diskuzních stránkách, kontrola pravopisu nebo kontrola splnění stylistických pravidel (linting). Základem pro tuto práci bude projekt wiki-scripts, který obsahuje řadu skriptů v jazyku Python, které provádí časté úkony pro údržbu obsahu. Jedna z komponent tohoto projektu umožňuje synchronizaci dat mezi serverem MediaWiki a klientskou databází, což může být využito pro efektivní zpracování datově intenzivních úloh.
Požadavky: Studenti musí mít zkušenosti s programováním v Pythonu nebo v JavaScriptu. Předchozí zkušenosti s vývojem webových aplikací jsou také výhodou.