OpenCl内核代码

OpenCl kernel code

本文关键字:代码 内核 OpenCl      更新时间:2023-10-16

我是OpenCL的新手(今天开始)。我很难实现以以下方式添加数组数字的内核代码:如果一个[]=[1,2,3,4,5,6,7,8,9,10),然后和应该和[]= [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++;"
        "   }  ";

我肯定这不是做这件事的方法。欢迎在这方面提出建议。

您应该计算i,就好像工作项是集合中唯一的工作项一样。Gid是工作项的全局id, I需要是它的三倍。在使用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];
}