Zaawansowane obliczenia na kartach graficznych
Informacje ogólne
Typ:obowiazkowyKierunek:Informatyka studia drugiego stopnia
Semestr:letni
Wymiar zajęć:30h wykładu 30h laboratorium
Punkty ECTS:5
Wymogi wstępne
Wymagana znajomość języka C oraz podstawowe zrozumienie programowania równoległego, bardzo wskazane wcześniejsze spotkanie z OpenMP lub MPI.Założenia i cele przedmiotu
Celem przedmiotu jest wprowadzenie do programowania kart graficznych traktowanych jako koprocesor wspomagający obliczenia. Kurs zawiera krótki przegląd metod programowania równoległego: procesy, wątki, MPI, OpenMP oraz dokładne wprowadzenie do technologii CUDA z SDK 3.2/4.0. Przez cały czas trwania kursu studenci pracują z komputerem wyposażonym w 216-rdzeniową kartę graficzną i 4-rdzeniowy procesor. Językiem ilustracyjnym jest klasyczny C, a zalecanym środowiskiem operacyjnym Linux.Program
- Przypomnienie i rozwinięcie umiejętności programowania w C: precyzyjny pomiar czasu, operacje IO, zarządzanie pamięcią i zaawansowane wskaźniki.
- Wprowadzenie do programowania równoległego: programowanie procesów współbieżnych
- Wprowadzenie do programowania równoległego: programowanie wątków (pthreads)
- Wprowadzenie do programowania równoległego: standardy MPI oraz OpenMP
- Przegląd technologii CUDA, SDK, środowiska programistyczne, oprogramowanie testowe i demonstracyjne; wstęp do budowy kart graficznych i zapoznanie z architekturą
- Programowanie karty graficznej - workflow, pierwsze programy, sumowanie wektorów
- Analiza środowiska i możliwości kart: badanie i pomiary możliwości kart graficznych na przykładzie programu do sumowania wektorów.
- Problem kolizji oraz metody jego rozwiązania: różne algorytmy redukcji
- Przyspieszanie obliczeń za pomocą modelu pamięci rozproszonej oraz SHARED.
- Koalescencja, dostęp do pamięci globalnej i jej wpływ na szybkość obliczeń.
- Zagadnienia zaawansowane, metody mnożenia macierzy z tilingiem i pasmowe, metoda CGM oraz inne wybrane algorytmy numeryczne.
Sposób zaliczenia
Rozwiązanie problemu projektowego, egzaminUmiejętności i kompetencje
- Przed kursem: podstawowe programowanie w C
- Po kursie: zaawansowane programowanie w C z wykorzystaniem technologii CUDA do rozwiązywania problemów numerycznych
Literatura
- Programming Massively Parallel Processors: A Hands-on Approach (Applications of GPU Computing Series) by David B. Kirk and Wen-Mei W. Hwu
- GPU Computing Gems Emerald Edition (Applications of GPU Computing Series) by Wen-mei W. Hwu
- CUDA by Example: An Introduction to General-Purpose GPU Programming by Jason Sanders and Edward Kandrot
