атомарные операции над общей памятью - PullRequest
2 голосов
/ 22 апреля 2011

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

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

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

1 Ответ

4 голосов
/ 22 апреля 2011

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

atomicAdd( a + 2, 1 );

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...