Lista zadań nr 2

Zadanie 1 (obligatoryjne - daje ocenę 3.0)

Na podstawie programu podanego na wykładzie opracuj program mnożący macierze i wykorzystujący wyłącznie pamięc globalną urządzenia CUDA. Przygotuj wersję pracującą z CPU hosta. Użyj kodu do mnożenia jak największych macierzy danych typu float. Porównaj czasy mnożeń na CPU i GPU (zaniedbaj czas pochłaniany przez transfer danych).  Macierze wypełnij danymi gwarantującymi łatwe zweryfikowanie zawartości macierzy wynikowej.  Sprawdź, czy wynik uzyskany z GPU jest identyczny z  obliczonym na CPU.

Zadanie 2 (dodatkowe - daje ocenę 5.0)

Wykonaj zadanie 1, a następnie zaimplementuj kod mnożący macierze na GPU z wykorzystaniem pamięci dzielonej. Wykorzystaj kod zaprezentowany na wykładzie. Przygotuj staranny eksperyment porównujący czasy wykonania obu kerneli dla macierzy o różnych wielkościach (od bardzo małych do wykorzystujących całą pamięć globalną urządzenia). Opracuj i zaprezentuj wyniki.