1

Wavefront が実行されると、きめ細かなマルチスレッドが提供されます。この結果の 1 つは、次のスライドに示すように、分岐予測の要件がないことです。

ここに画像の説明を入力

しかし、私はこれを理解することができません。誰かがこれを簡単に説明できますか?

4

3 に答える 3

1

一部の詳細は、実際の G​​PU アーキテクチャによって異なります。しかし、Trudbert が既に (+1) を与えた答えに加えて、単純化された例:

このようなブランチの場合

if (data[threadIndex] > 0.5) {
    data[threadIndex] = 1.0;
}

trueステートメントが であるスレッドのセットと、ステートメントがであるスレッドの別のセットが存在する場合がありfalseます。ステートメントが であるスレッドは、他のスレッドが作業を完了するまでfalse単に待機しているように想像できます。

同様に、このようなブランチの場合

if (data[threadIndex] > 0.5) {
    data[threadIndex] = 1.0;
} else {
    data[threadIndex] = 0.0;
}

これは、すべてのスレッドがブランチの両方のパスを実行し、「間違った」パスからの結果が確実に無視されるようにすることを想像できます。これは「予測実行」と呼ばれます。

(これに関するより詳細な情報はGPU Gems 2 の第 34 章にあります)

したがって、「正しい」分岐を予測するメリットがないため (すべてのスレッドがすべての分岐を取得する必要があるため)、分岐予測を導入する理由はありません。

于 2014-08-24T18:21:58.607 に答える