English version 🇬🇧

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:

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ř.:

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í:

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.