#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);
}