Атомарные операции над общей памятью
Как я могу сделать атомарную операцию на общей памяти?
у меня есть что-то похожее на это:
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
поэтому 5 потоков увеличиваются. Как я могу это сделать?
я знаю, что таким образом я сериализирую выполнение 5 потоков, но как это влияет на деформацию? будут ли сериализованы все потоки в варпе или только первые 5?
1 ответ
Решение
Заменить [2]++ на
atomicAdd( a + 2, 1);
если вы можете сделать неподписанный, вы можете вместо этого использовать atomicInc(), но любой из них снизит производительность.