Zaawansowane obliczenia na kartach graficznych


Informacje ogólne

Typ:obowiazkowy
Kierunek: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, egzamin

Umieję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

  1. Programming Massively Parallel Processors: A Hands-on Approach (Applications of GPU Computing Series) by David B. Kirk and Wen-Mei W. Hwu
  2. GPU Computing Gems Emerald Edition (Applications of GPU Computing Series) by Wen-mei W. Hwu
  3. CUDA by Example: An Introduction to General-Purpose GPU Programming by Jason Sanders and Edward Kandrot