#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()
вместо этого, но любой из них приведет к снижению производительности.