CUDA: Porovnání verzí

Smazaný obsah Přidaný obsah
mBez shrnutí editace
Řádek 147:
# Spuštění výpočtu na grafické kartě
# Přesun výsledků z paměti grafické karty do hlavní RAM paměti
 
=== Ukázka kódu v CUDA C ===
<source lang="c">
// Kód pro GPU
__global__ void VecAdd(float* A, float* B, float* C, int N)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < N)
C[i] = A[i] + B[i];
}
// Kód pro CPU
int main()
{
int N = ...;
size_t size = N * sizeof(float);
// Alokace vstupních vektorů h_A and h_B v hlavní paměti
float* h_A = (float*)malloc(size);
float* h_B = (float*)malloc(size);
// Inicializace vstupních vektorů
...
// Alokace paměti na zařízení
float* d_A;
cudaMalloc(&d_A, size);
float* d_B;
cudaMalloc(&d_B, size);
float* d_C;
cudaMalloc(&d_C, size);
// Přesun vektorů z hlavní paměti do paměti zařízení
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
// Volání kernelu
int threadsPerBlock = 256;
int blocksPerGrid = (N + threadsPerBlock – 1) / threadsPerBlock;
VecAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);
// Přesun výsledků z paměti zařízení do hlavní paměti
cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);
// Uvolnění paměti na zařízení
cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);
// Uvolnění hlavní paměti
...
</source>
 
== Paměťový model ==