Zasady zaliczenia

  • Obecność na zajęciach (obowiązują ogólnoakademickie reguły dotyczące dopuszczalnych nieobecności).
  • Systematyczna praca nad projektem zaliczeniowym.
  • Uzyskanie min. 51% punktów z testu kończącego wykład.
  • Uzyskanie min. oceny dostatecznej z końcowego projektu zaliczeniowego oraz oddanie go w wyznaczonym terminie.

Projekt zaliczeniowy

Równoległa operacja dwuwymiarowego splotu obrazu

Wersja podstawowa na ocenę dostateczną: podstawowy splot 2D w pamięci globalnej

  • załadowanie obrazu w skali szarości w postaci macierzy zawierającej wartości pikseli,
  • implementacja kernel’a CUDA wykonującego operację splotu, gdzie każdy wątek oblicza jeden pikselobrazu wynikowego na podstawie kwadratowego okna filtru,
  • każdy kernel odczytuje dane z pamięci globalnej,
  • brak konieczności obsługi padding’u (wypełnienia brzegów).

Wersja rozszerzona o wykorzystanie pamięci współdzielonej, ocena dobra

  • przed wykonaniem splotu blok wątków ładuje swój fragment obrazu do pamięci współdzielonej,
  • każdy wątek korzysta z danych w pamięci współdzielonej, aby przyspieszyć dostęp do sąsiednich pikseli,
  • bloki mają miejsce na przechowywanie dodatkowych pikseli wypełniających (padding).

Wersja złożona na ocenę bardzo dobrą: wykorzystanie asynchronicznego transferu pamięci

  • implementacja wykorzystuje asynchroniczne transfery danych do pamięci współdzielonej przy użyciu strumieni CUDA i funkcji cudaMemcpyAsync,
  • dodatkowa możliwość przetwarzania obrazu w kawałkach (tiles), by przetwarzać duże obrazy bez przekraczania limitu pamięci współdzielonej; w praktyce oznacza to podział obraz na małe fragmenty (np. 32×32, 16×16) – tzw. tiles – i przetwarzanie je niezależnie (jeden blok na raz).

Termin oddania: 20 stycznia 2026.

Samodzielność pracy

Wszystkie projekty zaliczeniowe będą poddawane sprawdzeniu systemem antyplagiatowym oraz systemem wykrywającym udział rozwiązań automatycznych w powstawaniu rozwiązania. W przypadku stwierdzenia niesamodzielności, student uzyskuje ocenę niedostateczną bez możliwości poprawy. Niewykluczone są również dalsze konsekwencje dyscyplinarne.

Materiały dydaktyczne

WykładĆwiczenia
1. Programowanie współbieżne
2. Architektura sprzętowa procesorów graficznych
3. Wprowadzenie do technologii NVIDIA CUDA
4. Profilowanie wydajności kodu CUDA
5. Optymalizacja dostępu do pamięci GPU
6. Operacje tensorowe
7. Wykorzystanie technologii CUDA w języku Python
Bonus: Zasoby GPU dostępne w usłudze Google Colab
1. Programowanie równoległe w C++
2. Programowanie równoległe w CUDA
3. Profilowanie kodu
4. Optymalizacja dostępu do pamięci
5. Operacje tensorowe
6. Technologia CUDA w języku Python