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

Ответы (0 шт):