Logo ČVUT
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE
STUDIJNÍ PLÁNY
2023/2024
UPOZORNĚNÍ: Jsou dostupné studijní plány pro následující akademický rok.

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

Přihlášení do KOSu pro zápis předmětu Zobrazit rozvrh
Kód Zakončení Kredity Rozsah Jazyk výuky
B0M36SPJ KZ 4 2P+2C česky
Garant předmětu:
Tomáš Pevný, Václav Šmídl
Přednášející:
Tomáš Pevný, Václav Šmídl
Cvičící:
Jan Franců, Niklas Maximilian Heim, Tomáš Pevný, Václav Šmídl, Matěj Zorek
Předmět zajišťuje:
katedra počítačů
Anotace:

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ů.

Požadavky:

Předmět předpokládá pouze základy programování, základy optimalizace a diferenciálních rovnic. Výhodou je absolvování předmětu Funkcionální programování, případně bakalářského kurzu jazyka Julia.

Osnova přednášek:

1.Úvod do Julie, syntax, funkce, základní konstrukty

2.Typový systém a koncept multiple dispatch

3.Balíčkovací systém, prostředí, testy, integrace

4.Návrhové vzory, scope, closure, interface

5.Ladění výpočetní efektivity, benchmarks, profilování

6.Introspekce jazyka, abstract syntax tree, základní modifikace kódu

7.Makra, rozdíl oproti funkcím, implementace doménových jazyků

8.Úvod do automatického derivování

9.Manipulace s reprezentací kódu, automatické generování kódu

10.Různé úrovně paralelního programování

11.Programování na grafické kartě

12.Propagace neurčitosti diferenciální rovnicí

13.Optimalizace ODE z měřených dat

Osnova cvičení:

1.Seznámení s prostředím, základní úlohy

2.Typový systém čísel, návrh typu pro intervalovou aritmetiku včetně operací

3.Vytvoření balíčku pro intervalovou aritmetiku

4.Návrhové vzory v implementaci gradientního sestupu (minibatching, ukládání mezivýsledků, atd.)

5.Odladění neefektivně napsaných příkladů

6.Výpis abstract syntax tree funkce jako stromové struktury

7.Tvorba makra pro zápis řetězení funkcí

8.Implementace metody forwarddiff s duálními čísly

9.Implementace reverse diff manipulací kódu

10.Paralelizace výpočtů lineární algebry

11.Implementace intervalové aritmetiky na GPU

12.Propagace neurčitosti modelem Lotka-Volterra

13.Učení parametrů Lotka-Voltera modelu z dat

Cíle studia:
Studijní materiály:

Povinná literatura:

1. Tom Kwong , Hands-On Design Patterns and Best Practices with Julia, 2019

Doporučená literatura:

2.Bezanson, Jeff, et al. Julia: A fresh approach to numerical computing. SIAM review 59.1 (2017): 65-98.

3.Lauwens, Ben, and Allen B. Downey. Think Julia: how to think like a computer scientist. O'Reilly Media, 2019.

4.Julia Documentation. https://docs.julialang.org/en/v1/manual/documentation/index.html

Poznámka:
Další informace:
https://juliateachingctu.github.io/Scientific-Programming-in-Julia/dev/
Rozvrh na zimní semestr 2023/2024:
06:00–08:0008:00–10:0010:00–12:0012:00–14:0014:00–16:0016:00–18:0018:00–20:0020:00–22:0022:00–24:00
Po
Út
St
Čt

místnost KN:E-327
Pevný T.
Šmídl V.

09:15–10:45
(přednášková par. 1)
Karlovo nám.
Solarium K327
místnost KN:E-327

11:00–12:30
(přednášková par. 1
paralelka 101)

Karlovo nám.
Solarium K327
Rozvrh na letní semestr 2023/2024:
Rozvrh není připraven
Předmět je součástí následujících studijních plánů:
Platnost dat k 18. 4. 2024
Aktualizace výše uvedených informací naleznete na adrese https://bilakniha.cvut.cz/cs/predmet6985906.html