1

複数のスレッドが同じ配列の場所、たとえばグローバルメモリにあるarray[i]に書き込むカーネルがあります。ここSOでの他の関連する質問は、答えとしてアトミックや他のものの使用を与えました。しかし、実際のcudaコードを示す答えはありません。array [i]、つまりインデックスiでの配列の位置が、複数のスレッドによってアトミックにどのように書き込まれるかを、誰でもcudaコードに示すことができますか。ありがとう!

4

1 に答える 1

2

CUDAは、アトミック操作用のコンパイラ組み込み関数を提供します。各計算機能で使用できるアトミック操作の詳細については、 『CUDA Cプログラミングガイド』を参照してください。countersは、gridDim.xサイズの整数の配列へのポインターです。各スレッドは、そのblockIdx.xによってインデックス付けされた配列値をインクリメントします。

__global__ void CountThreadsInBlock(int* counters)
{
    int i = blockIdx.x;
    atomicAdd(&counters[i], 1);
}

// NOTE: Assume 1D launch.
于 2012-08-02T02:19:04.697 に答える