WAŻNE
Dziekanat ściga mnie w sprawie ocen. Proszę oddać programy jak najszybciej. Ostateczny termin to 1 lipca.
1 lipca będę od 7:00, o 11:00 zaczyna się egzamin z AiSD, więc 11:00 +/- 20 minut mnie nie będzie.
Na wykładzie najpierw zostanie wprowadzona technologia CUDA (~5 wykładów)
a potem algorytmy typowo równoległe z odwołaniami do klasyki typu PRAM.
Laboratorium z dużym prawdopodobieństwem będzie się odbywać w Irlandii.
Uwaga: zamiast karty NVidia można spróbować programu gpuocelot.
Projekciki na ocenę - trzeba zrobić jeden, ale porządnie (na 30 x 45 minut pracy).
Zaproponować swój
Temperatura 3D (z ilustracją)
Game of Life (z animacją)
Sieci sortujące na GPU - może trzeba napisać program, który napisze program
Szkic na pierwsze laboratoria
https://developer.nvidia.com/cuda-zone
zainstalować kompilator na Ubuntu 14.04 / 12.04 lub własnym
znaleźć "CUDA reference Manual" i "CUDA C Programming Guide"
znaleźć nvcc
znaleźć "code samples"
skompilować program, który nic nie robi
uruchomić na nim Compute Profiler, potestować dodając puste pętle
użyć cudaGetDeviceProperties()
dodawanie wektorów z pomiarem czasów
spróbować tłumaczenia na OpenCL
Szkic na kolejne:
Za pomocą eventów zmierzyć czas dodawania wektora na blokach i na wątkach
Zmierzyć osobno czas przesyłania danych i czas obliczeń
Uruchomić programy z wykładów, poszukać: cuda by example source codes
Porównać programy z wykładów z odpowiednikami na pamięci globalnej
Po trzecim wykładzie:
Użyć interfejsu CUDA - OpenGL
Przetestować czasy obliczenia histogramu
na pamięci globalnej względem lokalnej
ze zmienną liczbą bloków w stosunku do liczby multiprocesorów
Sprawdzić czasy działania różnych wersji programu obrazującego streamy
Po czwartym wykładzie:
Przetestować mnożenie macierzy i zmierzyć czasy działania
na pamięci globalnej
z cache'owaniem w pamięci lokalnej specjalnie tak, żeby zaburzyć coalescing (wszystko czytamy kolumnami)
z cache'owaniem tak, żeby wykorzystać coalescing
pamięć lokalną zarezerwować idealnie na szerokość kafelka, albo na o 1 większą
dla kafelek i liczby wątków w bloku: 8x8, 16x16 i 32x32
poszukać "occupancy calculator" i spróbować użyć
Najbardziej polecam:
Cuda by Example
Programming Massively Parallel Processors
Przydatne linki: