2011-07-05 14 views
10

GPUで分岐予測について質問があります。私が知る限り、GPUでは分岐を使って述語を行います。 Aは、40サイクルを取り、1本の経糸のために仮定した場合、Bは、実行を完了するために50サイクルかかるのであれば、AとBの両方が実行さGPUの分岐予測

if (C) 
A 
else 
B 

、そう例えば:

私はこのようなコードを有しますこのブランチを完成させるのに合計90サイクルかかりますか?あるいは、AとBが重なっている、すなわちAのいくつかの命令が実行された後、メモリ要求を待ってから、Bの命令が実行され、メモリを待つなどのことですか? ありがとう

+10

この質問をさらに編集したい人は、ブランチ予測とブランチ予測は**同じものではないことに注意してください...... – talonmies

+0

ここではよく分かっています:http:// www.yosefk.com/blog/simd-simt-smt-parallelism-in-nvidia-gpus.html –

答えて

11

これまでにリリースされたCUDA対応のアーキテクチャはすべて、SIMDマシンのように動作します。ワープ内に枝の分岐がある場合、両方のコードパスは、ワープ内のすべてのスレッドによって実行され、アクティブなパスに従わないスレッドはNOPと同等の機能を実行します(条件付き実行があると思いますワープ内の各スレッドにアタッチされたフラグで、実行されていないスレッドをマスクすることができます)。

あなたの例では、90サイクルの答えはおそらく、実際に起こっていることの代替案より良い近似です。

+0

私が覚えているように、CUDA asmには分岐命令がありますが、分岐はすべてのスレッドのスレッドによって使用されます。 – osgx

+2

as ptx_isa.pdf: "ワープのスレッドがデータ依存の条件付きブランチで分岐する場合、ワープは各分岐パスを順次実行し、そのパスにないスレッドを無効にし、すべてのパスが完了するとスレッドは同じ実行パスです。 "だから、PTXには条件付きブランチがありますが、ワープのすべてのスレッドは、このブランチを均一にする(パフォーマンスを得るために)と同時刻に取るかどうかを指定する必要があります。 – osgx

+0

ありがとう、talonmiesとosgx。したがって、上記の場合、コードを実行するには90サイクルになります。しかし、私はなぜ彼らは別のものを実装していないのだろうか?オーバーラップAとBを意味するので、スループットは高くなければなりません。その場合、SIMD方式で動作しますが、レイテンシをより良く隠すことができます(ブランチの別のパスを実行することによって)。 – Zk1001

関連する問題