SM に 256 スレッド/ブロックを設定した場合、合計は 3 ブロック/SM になります (最大 768 スレッド/SM を考慮)。これで、ワープ/ブロックの合計は 256/32 = 8 となり、したがって 8*3 = 24 ワープ/SM になります。ブロック内のこれらの 8 つのワープは順次または並列に実行され、SM 内の 24 のワープは順次または並列に実行されますか? いつでも3つのブロックをSMで実行できることはすでにクリアされています(並列)。
1 に答える
2
@robot、読みやすくするために、ディスカッションを回答に移動しました。また、お好みで承ります。
異なるブロックを異なる SM にマップして、並列に実行することができます。ただし、内部的には、ブロックは SM で一度に 1 つずつ実行されるようにスケジュールされたワープで構成されます (1.x デバイス上)。ただし、グラフィックス ハードウェアは、0 オーバーヘッドで異なるワープ間を切り替えることができます (静的レジスタ割り当てのため)。したがって、通常、さまざまなワープからの (場合によってはさまざまなブロックからの) 命令が、SM のパイプラインのさまざまな段階に存在します。
アクティブなワープは、実行の準備ができているワープです。つまり、バリアやメモリ アクセスを待機しておらず、レジスタ依存性 (書き込み後読み取りなど) を持っていません。ハードウェアが次に実行するワープをどのように選択するかはわかりません。おそらくワープは、飢餓を防ぐために「年齢」(待ち時間)やその他の要因によって優先順位が付けられます。
ご質問について:
- 1.x デバイスでは、SM ごとに最大 768 スレッド、つまり 24 warp/SM が存在する可能性があります。2.x 以降では、SM ごとに最大 1536 スレッド/48 ワープがあります (レジスタの使用状況によって異なります)。
- GPU ごとに 10 個の SM があり、SM ごとに 24 個のワープを実行するのに十分なレジスタ/共有メモリがある場合、GPU ごとに最大 24*10 個のアクティブなワープが存在する可能性があります。ただし、プログラム ロジックによっては、ほとんどのワープがメモリ アクセス/レジスタの依存関係またはバリアを待機するため、すべてのワープが同時にアクティブになることはめったにありません。命令の実際の実行 (スケジューリングではない!) は、1.x デバイスで最大 22 サイクルかかる場合があるため、命令が完了するまでワープは非アクティブになることに注意してください。
于 2012-11-23T08:51:26.987 に答える