Přejít k hlavnímu obsahu

Programování vědeckých výpočtů v jazyce Julia

Fakulta
Fakulta elektrotechnická ČVUT
Semestr
zimní
Vyučován
Ne
WWW

V rámci předmětu budou představeny unikátní vlastnosti jazyka Julia, např. jeho typový systém, návrhový vzor multiple dispatch, metaprogramování, generování a manipulace kódu. Tyto vlastnosti umožňují velmi rychlý a snadný návrh algoritmů, jejich výpočetní efektivita je srovnatelná s implementací v nízko úrovňovém jazyce (např. C nebo Fortran). Tyto koncepty a jejich efektivita budou představeny na běžných vědeckých úlohách jako je implementace obecného algoritmu gradientního sestupu a výpočet diferenciálních rovnic. Bude ukázáno, že obecně navržené základní algoritmy umožňují bez modifikace i pokročilé funkce jako je výpočet propagace neurčitosti v rámci řešení diferenciální rovnice nebo optimalizaci řešení diferenciální rovnice metodou gradientního sestupu. V rámci cvičení budou studenti tvořit vlastní implementace těchto algoritmů.

Obsah:

Návrh vědeckých výpočtů je specifickou oblastí programování, ve které je kladen důraz na: i) rychlé a snadné navržení nového algoritmu, ii) pokud možno co nejrychlejší spuštění výsledného kódu, iii) obecnost kódu umožňující snadné použití algoritmu např. s jiným typem vstupu. Splnění všech těchto požadavků je velmi náročné a proto jsou stávající prostředí pro tvorbu vědeckých programů založena na kombinaci dvou různých jazyků. V jazyce nízké úrovně (Fortran, C, C++) je napsána knihovna, jejíž funkce volá skriptovací jazyk (Matlab, Python, R). Pokud je potřeba implementovat nový algoritmus nebo modifikovat stávající, je třeba přepsat knihovnu nebo se smířit s neefektivním výpočtem kódu skriptovacího jazyka. Ačkoliv existují pokusy překlenout mezeru mezi těmito dvěma jazyky (např. projekt Cython), nejsou pro svou složitost příliš rozšířené. Jazyk Julia byl od počátku navržen jako jazyk pro vědecké výpočty s důrazem na řešení zmíněných problémů, které nejsou uspokojivě řešeny stávajícími nástroji. Obsahuje nové návrhové vzory, např. multiple-dispatch, pro snadnou rozšiřitelnost (jako zobecnění objektově orientovaného a funkcionálního programování), unikátní nástroje pro manipulaci s kódem, díky nimž je rychlost výsledného kódu srovnatelná s C a C++. Na fakultě se v současné době vyučují Matlab, Python i R jako současné standardy v daných oborech. Domníváme se, že jazyk Julia má významnou šanci pozici těchto nástrojů v budoucnu doplnit a postupně pro některé typy výpočtů nahradit. Inovace představené v jazyce Julia mohou také pronikat do ostatních jazyků a vytvořit novou třídu jazyků. V rámci předmětu seznámíme studenty se základními koncepty používanými v jazyce, z nichž některé nejsou ještě vyučovány v žádném existujícím kurzu (např. metaprogramování, automatické generování kódu, pokročilá makra, multiple dispatch). Tento předmět rozšiřuje studentům znalosti programování z předmětů zabývajících se programovacími jazyky: PRP (procedurální programování), PJV (Java), CPP (C++), PDV (paralelní programování), FUP (funkcionálních programování), ESW (efektivní software). Současně nabízí alternativní prostředí pro implementaci vědeckých projektů, které se vyučují v předmětech MTB (Matlab) a SAN (statistická analýza dat). Bakalářská forma jazyka Julia je předkládána současně s tímto předmětem. Absolvování bakalářského předmětu usnadní studentovi první tři lekce, všechny ostatní jsou nadstavba, předmět tak lze absolvovat samostatně. Vyučované koncepty programovacího jazyka budou představeny na příkladech běžných vědeckých úloh jako je implementace optimalizačních úloh (metoda gradientního sestupu) a výpočet diferenciálních rovnic. Hlavní výhody nového jazyka budou demonstrovány na tom, jak snadné je dosáhnout pokročilých algoritmů, například automatického derivování funkcí (nejen neuronových sítí), propagace neurčitosti diferenciální rovnicí a optimalizace modelu diferenciální rovnice podle měřených dat. Prvních 7 lekcí se zabývá hlavními rys y jazyka a představuje je na jednoduchých příkladech jako je implementace aritmetických operací s intervaly a optimalizační metodě gradientního sestupu. Po absolvování těchto lekcí student(ka) získá ucelenou představu o nástrojích jazyka, jeho logice a způsobu použití. Bude seznámen(a) s vhodnými návyky práce, které se odlišují od zvyků z jazyků Matlab nebo Python. Posledních šest lekcí demonstruje vlastnosti a výhody jazyka na běžných vědeckých úlohách. Implementace postupů z automatického derivování je provedena dvěma způsoby: použitím typu duální číslo pro dopředné vyhodnocení a manipulací kódu pro zpětné vyhodnocení. Bude ukázáno jak lze využít balíček intervalové aritmetiky vyvinutý v první části kurzu pro řešení úlohy propagace neurčitosti řešičem diferenciálních rovnic. Vyvinutý algoritmus gradient descent a automatická derivace budou použity na optimalizaci parametrů diferenciální rovnice z naměřených dat.

Napsal uživatel neuner dne