W5 Flashcards
Czym jest CUDA?
CUDA (Compute Unified Device Architecture) to architektura opracowana przez firmę NVIDIA, umożliwiająca wykorzystanie procesorów kart graficznych do obliczeń ogólnego przeznaczenia.
Jakie są cechy procesorów kart graficznych (GPU) w architekturze CUDA?
GPU są wielordzeniowymi układami obliczeniowymi, zarządzającymi pracą wielu tysięcy wątków, charakteryzującymi się wysoką mocą obliczeniową i niskim zużyciem energii.
Co zakłada model programowania SIMT w architekturze CUDA?
Zakłada, że GPU jest koprocesorem przeznaczonym do wykonywania pewnych obliczeń, programy są uruchamiane z hosta, a wątki są grupowane w bloki i zarządzane przez GPU.
Jakie są wymiary bloków i gridów w CUDA?
Bloki wątków mogą być maksymalnie trójwymiarowe, a gridy maksymalnie dwuwymiarowe.
Jakie są rodzaje pamięci w architekturze GPU?
Globalna, lokalna, wspólna, pamięć tekstur oraz pamięć stałych.
Jak zdefiniować kernel w CUDA?
__global__ → kernel uruchamiany z hosta i wykonywany na urządzeniu, __device__ → kernel uruchamiany z poziomu innego kernela, __host__ → funkcja uruchamiana z hosta i przeznaczona do wykonania na hoście.
Jak odbywa się wywołanie kernela w CUDA?
nazwa-kernela«»(parametry-wywolania-kernela);
Jakie są funkcje do zarządzania pamięcią w CUDA?
cudaMalloc, cudaFree, cudaMemcpy, cudaMemset.
Co powoduje wywołanie cudaThreadSynchronize()?
Powoduje wstrzymanie wykonania wątku hosta do czasu zakończenia działania wszystkich wątków.
Jakie są podstawowe konstrukcje programistyczne w CUDA?
Kernel musi być funkcją zwracającą void, liczba wątków w bloku to maksymalnie 1024, a liczba bloków wątków powinna być większa niż liczba multiprocesorów w karcie graficznej.
Jakie są rodzaje kopiowania danych w CUDA?
cudaMemcpyHostToHost, cudaMemcpyHostToDevice, cudaMemcpyDeviceToHost, cudaMemcpyDeviceToDevice.
Jakie są ograniczenia i zalety kopiowania danych w CUDA?
Kopiowanie danych pomiędzy hostem a urządzeniem jest wąskim gardłem programów korzystających z GPU, lepszym rozwiązaniem jest inicjowanie danych za pomocą kernela.
Jak wygląda deklaracja zmiennych w pamięci wspólnej bloku wątków?
__shared__ float sData[256]; lub extern __shared__ float sData[];
Jakie są wywołania do synchronizacji wątków w bloku?
__syncthreads() powoduje wstrzymanie wszystkich wątków w bloku do momentu wywołania tej funkcji przez wszystkie wątki w bloku.