Obsah

CUDA a paralelní výpočty

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.

1. Sekvenční vs. Paralelní zpracování

Abychom pochopili přínos CUDA, musíme srovnat přístup CPU a GPU:

2. Architektura CUDA výpočtu

Program v CUDA se skládá ze dvou částí: kódu pro Host (CPU) a kódu pro Device (GPU).

A. Kernel

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.

B. Hierarchie vláken (Threads, Blocks, Grids)

CUDA organizuje výpočetní zdroje do logických celků:

3. Paměťový model v CUDA

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:

4. Proč je to důležité? (Škálovatelnost)

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).

5. Příklad: Sčítání polí (Vector Addition)

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