атомарные операции с разделяемой памятью

#c #cuda #gpu-atomics

#c #cuda #атомарные #gpu-shared-memory

Вопрос:

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

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

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

Ответ №1:

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

atomicAdd( a   2, 1);

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