我在我的一个内核中使用atom_inc。或多或少是这样的:
kernel exampleKernel(
global volatile int * x,
global const int maxX,
global const int * buf1,
global const int * buf2
)
{
if(x < maxX)
{
int y = atom_inc(x);
buf2[y] = buf1[get_global_id(0)];
}
}
但是当我调用它时,它会给我一个CL_OUT_OF_RESOURCES错误。 用0代替atom_inc(x)解决了这个问题...但是使内核变得无用。
任何可能导致错误的想法?
编辑:我已将这些扩展包含在程序中:
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
Edit2:实际上我使用:
初始化xkernel.setArgs(0,0);
我必须在这个地方使用记忆对象吗?
亲切的问候, 弗洛里安
答案 0 :(得分:0)
啊......好吧......看起来你必须在这种情况下使用记忆对象。
这里的解决方案是创建一个元素OpenCL缓冲区并将其设置为第一个参数。
我会留下这个问题并在这里回答,以便其他人可能不会犯同样的错误。