CUDA простая задача
Задача такая: даны три массива длины n, R[], G[], B[]. Надо найти количество таких индексов i, что R[i] * G[i] * B[i]<1000. С помощью средств CUDA.
Помогите, пожалуйста. Я туп и запутался. Вот мои попытки:
#include <iostream>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <stdlib.h>
#define BLOCK_DIM 2 //размер субматрицы
int M;
__global__ int count;
using namespace std;
__global__ void my_count (int *A, int *B, int *C, int M) {
int col = blockIdx.x * blockDim.x + threadIdx.x;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int index = col * M + row;
//сложение на GPU
if (col < M && row < K) {
if( C[index]* A[index]* B[index] < 1000){
count++;
}
}
}
int main() {
cout << "M: ";
cin >> M;
int *dev_a, *dev_b, *dev_c, *dev_d; //указатели на выделяемую память
int size = M *sizeof(int); //выделяемая память
cudaMalloc((void*)&dev_a, size); //выделение памяти
cudaMalloc((void*)&dev_b, size);
cudaMalloc((void*)&dev_c, size);
cudaMalloc((void*)&dev_d, size);
// заполнение a,b,c из файла или как угодно ещё конкретными числами
cudaMemcpy(dev_a, A, size, cudaMemcpyHostToDevice); //копирование на GPU
cudaMemcpy(dev_b, B, size, cudaMemcpyHostToDevice);
cudaMemcpy(dev_c, C, size, cudaMemcpyHostToDevice);
dim3 dimBlock(BLOCK_DIM, BLOCK_DIM); //число выделенных блоков
dim3 dimGrid((M+dimBlock.x-1)/dimBlock.x, (K+dimBlock.y-1)/dimBlock.y); //размер и размерность сетки
printf("dimGrid.x = %d, dimGrid.y = %d\n", dimGrid.x, dimGrid.y); //выводится размер сетки
matrixAdd<<<dimGrid,dimBlock>>>(dev_a, dev_b, dev_c, M, 3); //вызов ядра
cudaDeviceSynchronize();
cudaMemcpy(D, dev_d, size, cudaMemcpyDeviceToHost);
cudaFree(dev_a); //освобождение памяти
cudaFree(dev_b);
cudaFree(dev_c);
cudaFree(dev_d);
return 0;
}