c++ - OpenCl 内核代码

标签 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++;"
        "   }  ";

我敢肯定这不是解决问题的方法。在这方面的建议将不胜感激。

最佳答案

您应该计算 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];
}

关于c++ - OpenCl 内核代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136297/

相关文章:

C++ 初始化类成员构造函数

c++ - 原始数组是否比 std::array 有任何优势?

c++ - iptables C++ 控制

java - OpenCL 构建错误

memory - 如何在 OpenCL 中声明本地内存?

c++ - 错误处理方法的首选方法

c++ - 如何按其 .second 参数对 map 进行排序

linux - 请帮我解决 Linux/openCL 权限混淆问题

c++ - OpenCV 3 OpenCL UMat 绘图函数

gpgpu - 在混合供应商的硬件上运行 OpenCL