CUDA では、同じブロック内の 32 個の隣接するスレッドがワープとしてスケジュールされることを理解しています。しかし、ブロックごとに 1 つのスレッドを持つ複数のブロックを持つチュートリアルの CUDA コードをよく見かけます。このモデルでは、32 ブロックからの 32 スレッドがワープとしてスケジュールされますか? そうでない場合、このモデルはブロックごとに 32 スレッドに編成するほど効率的ではないと言えますか? ありがとう!
質問する
234 次
2 に答える
6
いいえ、異なるブロックのスレッドを同じワープでスケジュールすることはできません。1 つのスレッドのみでスレッドブロックのグリッドを作成すると、マシンから完全なパフォーマンスを得ることはできません。ブロックごとに 32 (または 32 の整数倍) のスレッドを使用するよりも効率的ではありません。たとえば、Fermi SM には、使用可能な 32 のワープ レーンがあります。1 つのスレッドのブロックをスケジュールしている場合、32 レーンのうち 1 レーンのみを使用できます。
スレッドには、1 つのブロック内で定義された (そしてそのブロックにのみ固有の) スレッド ID (threadIdx 組み込み変数) があります。
C プログラミング ガイドのハードウェア マルチスレッド セクションでは、1 つのブロック内のワープの総数を定義する公式が示されています。
于 2012-12-04T03:26:24.750 に答える