include stdio include cuda include stdlib include time include string

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <cuda.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(int argc, char *argv[])
{
//------Настройки-------------------
//Выбираем конфигурацию грида и блоков
dim3 blockSize; //Содержит кол-во потоков по x,y,z осям в блоке
dim3 gridSize; //Аналогично кол-во блоков в гриде
int threadNum = 128; //Потоков на блок, 1-мерная размерность
//Сколько блоков будет всего в гриде
const int blockCount = pixelsCount / threadNum;
//Обработка попиксельная, достаточно 1-мерной размерности
blockSize = dim3(threadNum, 1, 1);
gridSize = dim3(blockCount, 1, 1);
//Выбираем ГПУ
cudaSetDevice(0);
//Выделяем память на устройстве под входные и выходные данные
cudaMalloc(&deviceSourceImage, pixelsCount*3);
//Да, это указатель на указатель
cudaMalloc(&deviceResultImage, pixelsCount*3);
//Копируем исходные данные на устройство
cudaMemcpy(deviceSourceImage, rgbSource, pixelsCount*3, cudaMemcpyHostToDevice);
//запускаем выполнение на гпу
memcpyEnd = clock();
grayscale<<<gridSize, blockSize>>>(deviceSourceImage, deviceResultImage);
cudaDeviceSynchronize();
//Копируем данные с устройства в основную память
cudaMemcpy(rgbResult, deviceResultImage, pixelsCount*3, cudaMemcpyDeviceToHost);
}