OpenCl内核代码

时间:2016-10-19 15:53:50

标签: c++ opencl

我是OpenCL的新手(今天开始)。我很难实现以下列方式添加数组的内核代码: 如果A [] = [1,2,3,4,5,6,7,8,9,10],则总和应为sum [] = [4,10,16];

i.e, sum[i]=A[i]+A[i+2]; 
     i=i+3;

我已尝试过以下代码,但似乎无效。

std::string kernel_code =
        "   void kernel simple_add(global const int* A, global const int* B, global int* C){ "
        "   int x =0;"
        "   int i =get_global_id(0);"
        "   SUM[x]=A[i]+A[i+2];"
        "   i=i+3;
        "   x++;"
        "   }  ";

我确信这不是这样做的方法。在这方面的建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

你应该计算i,好像工作项是集合中唯一的一个。 gid是工作项的全局id,我需要三倍。使用后你也不需要修改gid或i。这不是最佳选择,但它可以为您提供正确的答案。

void kernel simple_add(global const int* A, global const int* SUM){
    int gid = get_global_id(0);
    int i = gid * 3;
    SUM[gid]=A[i]+A[i+2];
}