0

次のプログラムは「Cuda By Example」のアトミック ロックの実装を使用していますが、プログラムを実行するとマシンがフリーズします。誰かが私のプログラムの何が問題なのか教えてもらえますか? どうもありがとう

イーフェイ

#include <stdio.h>


__global__ void test()
{
    __shared__ int i, mutex;

    if (threadIdx.x == 0) {
       i = 0;
       mutex = 0;
    }
    __syncthreads();

    while( atomicCAS(&mutex, 0, 1) != 0);
    i++;
    printf("thread %d: %d\n", threadIdx.x, i);
    atomicExch(&mutex,0);
}
4

1 に答える 1

3

ここに理論があります。ワープの概念に精通していることを願っています。whileループでは、ワープ内のすべてのスレッドがwhileループに入ります。1つだけが終了し、残りのスレッドはwhileループ内に存在します。これにより、分岐が発生し、whileループを終了したスレッドが、分岐が再び収束するまで停止します。このスレッドはミューテックスを解放できる唯一のスレッドであるため、他のスレッドが収束するのを待つため、これは決して起こりません。

于 2012-01-20T12:05:14.590 に答える