Сума елементів вектора

4.2 Сума елементів вектора

Завдання. Потрібно обчислити суму елементів вектора розмірністю N елементів.

У самій програмі необхідно виконати наступні етапи: 1. Отримати дані для розрахунків. 2. Скопіювати ці дані в GPU пам'ять. 3. Провести обчислення в GPU через функцію ядра. 4. Скопіювати обчислені дані з GPU пам'яті в CPU. 5. Подивитися результати. 6. Звільнити використовувані ресурси.

Переходимо безпосередньо до написання коду:

Насамперед напишемо функцію ядра, яка і буде підсумовувати елементи вектора:

// Функція складання елементів вектора

__global__ void summOfVector (int * a. int * b) <
__shared__ int data [BLOCK_SIZE]; // створення масиву в Shared Memory девайса
int tid = threadIdx. x;
int idx = blockIdx. x * blockDim. x + threadIdx. x;
data [tid] = (idx 0; s = s / 2) <
if (tid
# include
# Define N (10000)
# Define BLOCK_SIZE 512

Виділимо окрему функцію на хості, в якій будуть инициализироваться дані:

// ініціалізація векторів
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));

for (int i = 0; i >> (dev_a. dev_b. dev_c);

cudaMemcpy (partial_c. dev_c. blocksPerGrid * sizeof (float). cudaMemcpyDeviceToHost);

floatdotres = 0;
for (int i = 0; i

Схожі статті