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