如果对一个数进行原子累加操作,操作10万次的时候,结果正确,但是操作10万次以上(如20万)结果就会出现错误。这个问题说明,原子操作受线程总数约束,还是受SM约束?它们之间有什么样的关系;
简易代码如下
#define N 100000 //200000
global void kernel(int *count)
{
tbid = blockIdx.x * blockDim.x + threadIdx.x;
atomicAdd(count, tbid);
}
int main()
{
…
kernel<<<N / 256 + 1, 256>>>(count);
…
}