Paralelní výpočty jsou typem výpočtů, při kterých se mnoho instrukcí provádí současně. Vycházejí z principu, že velké problémy lze často rozdělit na menší, které se pak řeší souběžně. CUDA (Compute Unified Device Architecture) je platforma od společnosti NVIDIA, která tento princip aplikuje na grafické procesory.
Abychom pochopili přínos CUDA, musíme srovnat přístup CPU a GPU:
Program v CUDA se skládá ze dvou částí: kódu pro Host (CPU) a kódu pro Device (GPU).
Kernel je speciální funkce napsaná v C/C++, která se spustí na GPU. Kouzlo spočívá v tom, že se tato funkce nevykoná jednou, ale N-krát paralelně v N různých CUDA vláknech.
CUDA organizuje výpočetní zdroje do logických celků:
Efektivita paralelních výpočtů závisí na tom, jak rychle se data dostanou k jádrům. CUDA využívá několik vrstev paměti:
Klíčovou vlastností CUDA je škálovatelnost. Pokud napíšete program pro GPU se 128 jádry, stejný kód poběží automaticky rychleji na nové kartě s 5000 jádry. Hardware si sám rozdělí bloky vláken mezi dostupné výpočetní jednotky (Streaming Multiprocessors).
V běžném C (CPU) byste použili cyklus `for`. V CUDA (GPU) napíšete pouze operaci pro jeden prvek a systém ji spustí pro všechny indexy naráz:
// CUDA Kernel pro sčítání dvou polí __global__ void addVectors(float *A, float *B, float *C, int n) { int i = threadIdx.x + blockIdx.x * blockDim.x; if (i < n) { C[i] = A[i] + B[i]; } }
Související články:
Tagy: cuda parallel_computing gpu programming nvidia