この例では、アトミック操作がスレッドの番号順に実行されると確信できますか? または、1 つのスレッドのみを使用することを除いて、別の方法で行うにはどうすればよいでしょうか?
__shared__ unsigned int cnt[MAXLEN], s[MAXLEN];
#pragma unroll
for (int i = 0; i < MAXLEN; i+= blockDim.x)
p[atomicSub(cnt + s[threadIdx.x + i], 1) - 1] = threadIdx.x + i;
__syncthreads();