Об атомарном доступе __local переменных:
Я знаю, что глобальные операции выполняются медленно по сравнению с локальными. В этом смысле я хотел бы сделать атомарный доступ к некоторым переменным.
Я знаю, что могу делать атомарные операции в 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]);
}
Как я могу делиться атомарными данными между рабочими в данной рабочей группе?
Например: я хотел бы сделать что-то вроде этого:
// 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;
Разве это не возможно? Если нет, то как я мог это сделать?