我怀疑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
被称为错误?
感谢您的帮助:)