Sumă de elemente vectoriale

4.2 Suma elementelor vectorului

Sarcina. Este necesar să se calculeze suma elementelor unui vector cu dimensiunea N de elemente.

În programul însuși, trebuie să efectuați următorii pași: 1. Obțineți date pentru calcule. 2. Copiați aceste date în memoria GPU. 3. Efectuați calculul în GPU prin intermediul funcției kernel. 4. Copiați datele calculate din GPU-ul de memorie către CPU. 5. Vezi rezultatele. 6. Eliberarea resurselor utilizate.







Să mergem direct la scrierea codului:

Mai întâi, scriem funcția kernel, care va însuma elementele vectorului:

// Funcția adăugării elementelor unui vector

__global__ void summOfVector (int * a. int * b) <






date __shared__ int [BLOCK_SIZE]; // creați un matrice în dispozitivul de memorie partajată
int tid = threadIdx. x;
int idx = blockIdx. x * blockDim. x + threadIdx. x;
datele [tid] = (idx 0; s = s / 2) <
dacă (tid
# includ
# define N (10000)
# definește BLOCK_SIZE 512

Vom identifica o funcție separată pe gazdă, în care datele vor fi inițializate:

// inițializați vectorii
void initvector () <
vecTemp = (float *) malloc (N * sizeof (float));
vecX = (float *) malloc (N * sizeof (float));
vecP = (float *) malloc (N * sizeof (float));
vecR = (float *) malloc (N * sizeof (float));
vecB = (float *) malloc (N * sizeof (float));

pentru (int i = 0; i >> (dev_a; dev_b; dev_c);

cudaMemcpy (parțial_c. dev_c blocuriPerGrid * sizeof (float) cudaMemcpyDeviceToHost);

floatdotres = 0;
pentru (int i = 0; i







Articole similare

Trimiteți-le prietenilor: