OpenCL get_global_id可能会返回

时间:2014-04-06 14:37:43

标签: c++ kernel range opencl

我怀疑OpenCL内核的多次调用具有相同的get_global_id(0)返回值。

从主持人致电:

err = commandQueue.enqueueNDRangeKernel(my_kernel, cl::NullRange, cl::NDRange(1024), cl::NDRange(256), NULL, NULL);

和我的内核:

typedef struct { float x, y; } Point3;

__kernel void update_position (
    __global Point3* pts,
    __global Point3* speed,
    const unsigned int count,
    const float t)
{ 
    unsigned long i = get_global_id(0);
    if (i < count) { 
        pts[i].x += speed[i].x * t;
        pts[i].y += speed[i].y * t;
    }
}

我想要的是只更新一次1024 pts的每个项目。问题是多次运行程序我得到各种无效的结果。我猜get_global_id(0)不会返回0到1023(含)之间的唯一数字,所以有时这个内核主体执行的次数不止一次。

Khronos的官方网络API不幸遭到破坏,我找不到合适的答案/解决方案。

我应该使用其他函数来确定运行代码的核心/线程吗?或者NDRange被称为错误?

感谢您的帮助:)

0 个答案:

没有答案