2012-12-04 22 views
5

CUDAでは、同じブロック内の32の隣接スレッドがワープとしてスケジュールされることを理解しています。しかし、私は頻繁にブロックごとに1つのスレッドを持つ複数のブロックを持つチュートリアルCUDAコードを見つける。このモデルでは、32ブロックから32スレッドがワープとしてスケジュールされますか?そうでない場合、このモデルはブロックごとに32スレッドに編成するほど効率的ではないと言えますか?ありがとう!32ブロックの32スレッドはワープとしてスケジュールされますか?

答えて

6

いいえ、異なるブロックからのスレッドを同じワープでスケジュールすることはできません。スレッドを1つしか持たないスレッドブロックのグリッドを作成すると、マシンから完全なパフォーマンスが得られないことは間違いありません。ブロックあたり32(または32の整数倍)スレッドを持つよりも効率が悪いです。フェルミSMは、例えば、使用可能な32のワープレーンを有する。 1つのスレッドのブロックをスケジューリングする場合、それらの32のレーンのうちの1つだけがいつでも使用可能になります。

スレッドには、単一のブロック内で定義されたスレッドID(threadIdxビルトイン変数)があります。

Cプログラミングガイドのハードウェアマルチスレッドセクションには、a formula which defines the total number of warps in a single blockと記載されています。

0

もう1点追加してください。 いつもはワープによって発生するため、ブロックあたり32スレッド(1,2 ... 8,16)未満のスレッドを割り当てても、ワープ(32スレッド)に対して計算が行われ、リソースは32スレッドでストールされますブロック。

スレッドごとに32個のブロックを割り当てる場合は、32X32スレッドのリソースを停止しています。可能ならばこれを避けてください。

関連する問題