Атомарные операции над общей памятью

Как я могу сделать атомарную операцию на общей памяти?
у меня есть что-то похожее на это:

__shared__ int a[10];
//set a
if(tid<5)
  a[2]++;

поэтому 5 потоков увеличиваются. Как я могу это сделать?
я знаю, что таким образом я сериализирую выполнение 5 потоков, но как это влияет на деформацию? будут ли сериализованы все потоки в варпе или только первые 5?

1 ответ

Решение

Заменить [2]++ на

atomicAdd( a + 2, 1);

если вы можете сделать неподписанный, вы можете вместо этого использовать atomicInc(), но любой из них снизит производительность.

Другие вопросы по тегам