Równoległe i funkcyjne techniki programowania - opis przedmiotu
Informacje ogólne
Nazwa przedmiotu
Równoległe i funkcyjne techniki programowania
Kod przedmiotu
11.3-WI-INFD-RówniFunkcTechProg-S15
Wydział
Wydział Nauk Inżynieryjno-Technicznych
Kierunek
Informatyka
Profil
ogólnoakademicki
Rodzaj studiów
drugiego stopnia z tyt. magistra inżyniera
Semestr rozpoczęcia
semestr zimowy 2023/2024
Informacje o przedmiocie
Semestr
3
Liczba punktów ECTS do zdobycia
4
Typ przedmiotu
obieralny
Język nauczania
polski
Sylabus opracował
dr hab. inż. Marek Sawerwain, prof. UZ
Formy zajęć
Forma zajęć
Liczba godzin w semestrze (stacjonarne)
Liczba godzin w tygodniu (stacjonarne)
Liczba godzin w semestrze (niestacjonarne)
Liczba godzin w tygodniu (niestacjonarne)
Forma zaliczenia
Wykład
15
1
9
0,6
Zaliczenie na ocenę
Laboratorium
15
1
9
0,6
Zaliczenie na ocenę
Projekt
15
1
9
0,6
Zaliczenie na ocenę
Cel przedmiotu
Zapoznanie studentów z modelem technik programowania równoległego oraz funkcyjnego,
ukształtowanie wśród studentów zrozumienia i świadomości roli równoległych technik programowania, a także uwypuklenia zwiększającej się roli programowania funkcyjnego,
nauka podstawowych umiejętności w zakresie tworzenia programów równoległych w systemach wieloprocesorowych opartych o tradycyjne uniwersalne procesory (CPU) a także o graficzne wieloprocesorowe układy ogólnego zastosowania (GPU),
ukształtowanie podstawowych umiejętności w zakresie paradygmatu programowania funkcyjnego, a w szczególności roli funkcji i rekurencji, programowania bez efektów ubocznych oraz nabycie umiejętności używania techniki obliczeń leniwych.
Wymagania wstępne
Metody programowania, Algorytmy i struktury danych, Teoretyczne podstawy informatyki, Logika dla informatyków
Zakres tematyczny
Równoległy model obliczeniowy, klasy złożoności obliczeń równoległych.
Dostępne narzędzia pomagające realizować programy działające w środowiskach równoległych: MPI, OpenMP, CUDA, OpenCL.
Rodzaje prymitywnych operacji równoległych.
Zależność i podział danych, modele równoległych środowisk wykonawczych dla CPU oraz GPU.
Podstawowe konstrukcje funkcyjnego języka programowania na przykładzie języków OCaml, F#, Scala.
Typy danych, wyjątki, pojęcie obiektu.
Funkcje wyższego rzędu, model obliczeń programów funkcyjnych (w postaci uproszczonego opisu operacyjnego).
System typów, leniwe obliczenia oraz konstrukcje programowania równoległego.
Konstrukcje imperatywne w programowaniu funkcyjnym.
Metody kształcenia
Wykład: wykład konwencjonalny/tradycyjny.
Laboratorium: ćwiczenia laboratoryjne, wg listy zadań.
Projekt: praca w grupach, metoda projektu.
Efekty uczenia się i metody weryfikacji osiągania efektów uczenia się
Opis efektu
Symbole efektów
Metody weryfikacji
Forma zajęć
Warunki zaliczenia
Wykład - warunkiem zaliczenia jest uzyskanie pozytywnej oceny z egzaminu przeprowadzonego w formie pisemnej.
Laboratorium - warunkiem zaliczenia jest uzyskanie pozytywnych ocen ze wszystkich sprawdzianów pisemnych z ćwiczeń laboratoryjnych, przewidzianych do realizacji w ramach programu laboratorium.
Projekt - warunkiem zaliczenia jest wykonanie wszystkich zadań projektowych, przewidzianych do realizacji w ramach zajęć projektowych oraz przygotowanie pisemnego raportu ze zrealizowanego projektu.
Składowe oceny końcowej = wykład: 40% + laboratorium: 30% + projekt: 30%.
Obciążenie pracą
Studia stacjonarne (w godz.)
Studia niestacjonarne (w godz.)
Godziny kontaktowe (udział w zajęciach; konsultacjach; egzaminie, itp.)
70
45
Samodzielna praca studenta (przygotowanie do: zajęć, kolokwium, egzaminu; studiowanie literatury przygotowanie: pracy pisemnej, projektu, prezentacji, raportu, wystąpienia; itp.)
80
105
Łącznie
150
150
Punkty ECTS
Studia stacjonarne
Studia niestacjonarne
Zajęcia z udziałem nauczyciela akademickiego
3
2
Zajęcia bez udziału nauczyciela akademickiego
3
4
Łącznie
6
6
Literatura podstawowa
Gerassimos B.: Multicore and GPU Programming: An Integrated Approach, Elsevier LTD, Oxford, edycja 2, 2022.
Hwu, W-M.W. (Autor), Kirk D.B., El Hajj I.: Programming Massively Parallel Processors: A Hands-On Approach, Morgan Kaufmann Publishers, edycja 4, 2022.
Mattson G.T., He Y., Koniges E.A.: The OpenMP Common Core: Making OpenMP Simple Again, MIT Press, 2019.
Han J., Sharma B.: Learn CUDA Programming: A beginner's guide to GPU programming and parallel computing with CUDA 10.x and C/C++, Packt Publishing, 2019.
Syme D., Granicz A., Cisternino A.: F# 4.0 dla zaawansowanych, Wydanie IV, Helion 2017.
Sanders J., Kandrot E.: CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GPU, Helion, 2012.
Michaelson G.: An Introduction to Functional Programming Through Lambda Calculus, Dover Publications Inc., 2011.
Gaster B., Howes L., Kaeli D. R., Mistry P., Schaa D.: Heterogeneous Computing with OpenCL, Morgan Kaufmann, 2011.
Pacheco P.: An Introduction to Parallel Programming, Morgan Kaufmann, 2011.
Sanders J., Kandrot E.: CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley Professional, 2010, english edition.
Czech Z.: Wprowadzenie do obliczeń równoległych, Wydawnictwo Naukowe PWN, 2010.
Herlihy M., Shavit N.: Sztuka programowania wieloprocesorowego, Wydawnictwo Naukowe PWN, 2010, edycja polska.
Smith C.: Programming F#, O'Reilly Media, Inc.,Sebastopol, USA, 2010.
Pickering R.: Foundations of F#, Apress,USA, 2007.
Literatura uzupełniająca
Syme D., Granicz A., Cisternino A.: Expert F# 4.0, Apress, 2015.
Farber R.: CUDA Application Design and Development, Morgan Kaufmann, 2011.
Wen-mei W. Hwu, eds: GPU Computing Gems, Emerald Edition and Jade Edition, Morgan Kaufmann, 2011.
Harrop J.: F# for Scientists, John Wiley & Sons, Inc., Hoboken, New Jersey, USA, 2008.
Thomspon S.: Haskell - The Craft of Functional Programming, Addison-Wesley Longman Publishing Co., Inc. Boston, MA, USA, 1999.
Uwagi
--
Zmodyfikowane przez dr hab. inż. Marek Sawerwain, prof. UZ (ostatnia modyfikacja: 20-03-2023 10:29)
Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Korzystając z niniejszej strony, wyrażasz zgodę na ich używanie. Dowiedz się więcej.