我是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++;"
" } ";
我确信这不是这样做的方法。在这方面的建议将不胜感激。
答案 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];
}