2
关于__local变量的原子访问原子:__local OpenCL中
我知道它的速度慢与当地的人相比,做全球业务。从这个意义上说,我想对一些变量进行原子访问。
我知道我可以做的OpenCL原子操作:
// Program A:
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
__kernel void test(global int * num)
{
atom_inc(&num[0]);
}
如何给定的工作组内共享工作itens之间的原子数据?
为前:我想要做这样的事情:
// Program B: (it doesn't work, just to show how I'd like it to be)
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
__kernel void test(global int * num, const int numOperations)
{
__local int num;
if (get_global_id(0) < numOperations) {
atom_inc(&num);
}
}
到底NUM值应该返回:numOperations - 1;
这不可能吗?如果不是,我怎么能这样做?
您需要'atom_inc(&sharedNum,1);' - 请参阅手册页以了解详细信息:http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/atom_inc.html – Anteru 2012-03-15 15:35:22
我只是写错了,正确的是:atom_inc(&sharedNum,1); 顺便说一句,这不起作用,我把#pragma OPENCL EXTENSION cl_khr_int64_base_atomics:enable – felipe 2012-03-15 17:07:44
如果它是一个int,你不需要64位的原子?什么是你得到的错误信息? “它不工作”没有帮助。 – Anteru 2012-03-15 17:42:05