поведінка atomic_add в opencl - opencl

Я граю з прикладом на opencl:

__kernel void atomic(__global int* x) {
__local int a, b;
a = 0; b = 0;
a++;
atomic_inc(&b);

x[0] = a;
x[1] = b;
x[2]++;
atomic_inc(x+3);
}

Запуск цього коду з global_size = 1024 і workgroup_size = 8це наступний вивід:

[1 8 1 1024]

Я можу зрозуміти, що відбувається для всіх випадків, крім вартості, яку дають x[1]. Чому варто x[1] не 1024 але 8?

Відповіді:

3 для відповіді № 1

Під x[1] зберігається значення b яка є змінною, що знаходиться в __local адресний простір, тобто змінна спільного для всіх робочих елементів у робочій групі. Кожна робоча група має b ініціалізовано до 0, а атомарне збільшення до 8, оскільки розмір робочої групи дорівнює 8 (кожен елемент роботи збільшується на 1).