AMD Radeon HD 7700 GPU を使用しています。次のカーネルを使用して、ウェーブフロント サイズが 64 であることを確認します。
__kernel
void kernel__test_warpsize(
__global T* dataSet,
uint size
)
{
size_t idx = get_global_id(0);
T value = dataSet[idx];
if (idx<size-1)
dataSet[idx+1] = value;
}
メイン プログラムでは、128 要素の配列を渡します。初期値は dataSet[i]=i です。カーネルの後、次の値を期待します: dataSet[0]=0 dataSet[1]=0 dataSet[2]=1 ... dataSet[63]=62 dataSet[64]=63 dataSet[65]=63 dataSet [66]=65 ... データセット[127]=126
しかし、dataSet[65] が 63 ではなく 64 であることがわかりました。これは私の予想とは異なります。
私の理解では、最初のウェーブフロント (64 スレッド) は dataSet[64] を 63 に変更する必要があります。したがって、2 番目のウェーブフロントが実行されると、スレッド #64 は 63 を取得し、それを dataSet[65] に書き込む必要があります。しかし、dataSet[65] はまだ 64 のままです。なぜですか?