web-dev-qa-db-ja.com

CUDA:合計でいくつの同時スレッドですか?

私はGeForce GTX 580を持っています。2つまたは4つのマルチコアCPUと比較するために、(理想的には)実際に並列に実行できるスレッドの総数についてステートメントを作成したいと思います。

deviceQueryは、次の関連情報を提供します。

CUDA Capability Major/Minor version number:    2.0
(16) Multiprocessors x (32) CUDA Cores/MP:     512 CUDA 
Maximum number of threads per block:           1024

各CUDAコアはワープを並行して実行でき、ワープは32スレッドであると聞いたと思います。カードが512 * 32 = 16384スレッドを並行して実行できると言うのは正しいでしょうか、それともCUDAコアはどういうわけか実際には並行して実行されていませんか?

42
Eskil

GTX 580では、16 * 48の同時ワープ(各32スレッド)を一度に実行できます。つまり、16マルチプロセッサ(SM)* SMごとに48常駐ワープ*ワープあたり32スレッド= 24,576スレッドです。

並行性とスループットを混同しないでください。上記の数は、リソースをチップ上に同時に保存できるスレッドの最大数です-可能な数常駐。 CUDAの用語では、この最大値をoccupancyと呼びます。ハードウェアはワープを絶えず切り替えて、メモリアクセスの(大きな)レイテンシーと算術パイプラインの(小さな)レイテンシーをカバーまたは「隠す」のに役立ちます。

各SMは48個の常駐ワープを持つことができますが、各クロックサイクルで少数のワープ(GTX 580では平均1〜2ですが、プログラム命令の組み合わせによって異なります)からのみ命令を発行できます。

そのため、使用可能な実行単位とハードウェアが複数の問題を実行できる方法によって決定されるスループットを比較する方がおそらく良いでしょう。 GTX580には、512個のFMA実行ユニットがありますが、整数ユニット、特殊機能ユニット、メモリ命令ユニットなどもあり、これらはさまざまな組み合わせでデュアル発行(つまり、2つのワープから独立した命令を同時に発行)できます。

ただし、上記のすべてを考慮することは非常に難しいため、ほとんどの人は2つの指標を比較します。

  1. ピークGFLOP/s(GTX 580の場合、512 FMAユニット* FMAあたり2フロップ* 1544e6サイクル/秒= 1581.1 GFLOP/s(単精度))
  2. 関心のあるアプリケーションで測定されたスループット。

最も重要な比較は、実際のアプリケーションでは常に実時間で測定されます。

58
harrism

2コアCPUまたは4コアCPUと比較することで、陥りやすい特定のトラップがあります。

  • 並行スレッドの数は、実際に並行して実行されるスレッドの数と一致しません。もちろん、GTX 580で24576スレッドを同時に起動できますが、ほとんどの場合、最適な値は低くなります。

  • 2コアまたは4コアCPUは、任意の多数の同時スレッドを持つことができます! GPUの場合と同様に、ある時点からスレッドを追加しても役に立たないか、速度が低下することさえあります。

  • 「CUDAコア」は単一のスカラー処理ユニットですが、CPUコアは通常、たとえば4ワイドのSIMDユニットを含むより大きなものです。リンゴ同士を比較するには、アドバタイズされたCPUコアの数に4を掛けて、NVIDIAがコアと呼ぶものと一致させる必要があります。

  • CPUはハイパースレッディングをサポートしています。これにより、単一のコアが2つのスレッドを軽い方法で同時に処理できます。そのため、オペレーティングシステムは、実際にはハードウェアコアの2倍の「論理コア」を認識する場合があります。

要約すると、SIMDとハイパースレッディングにより、公平な比較のために、4コアCPUは実際に32の「スカラースレッド」を同時に実行できます。

9
CygnusX1

私はこれが少し遅れていることを理解していますが、とにかく手伝うと思いました。 10ページからCUDA Fermi アーキテクチャホワイトペーパー:

各SMは2つのワープスケジューラと2つの命令ディスパッチユニットを備えており、2つのワープを同時に発行して実行できます。

これは、各SMが2 * 32 = 64のスレッドを同時に実行できることを意味します。 GPUで合計16 * 64 = 1024スレッドを同時に実行できることを意味するかどうかはわかりません。

0
Mitch