talonmiesとchaohuangはコメントで良い情報を提供しているので、それを調べる必要があります(なぜこれらが答えではないのかわかりませんが、それが彼らの呼びかけです)。いずれにせよ、私はあなたが考慮していないかもしれない何かを説明するために省略された部分的な答えを提供します。
8つの制御スレッドと8つのプロセッサーがあるとしましょう。8つのスレッドすべてのすべての命令が1サイクルのみのオンチップ命令である場合、8つのスレッドすべてがサイクルで終了します(スレッドあたりの合計命令数n
を想定)。n
n
ここで、制御の各スレッドが命令で構成されているとしましょう。r
これらの一部はオフチップメモリ命令であり、たとえば、完了するまでに100サイクルかかります。これらの8つのスレッドは[(1 - r) + 100r]n
、完了するまでにサイクルがかかります。の場合r=0.1
、これは前のケースの約11倍です。
ここで、16個のスレッドがあるとしましょう。遅い操作で8スレッドの最初のバッチがブロックされると、他のスレッドが実行できます。オンチップ命令を実行でき、オフチップ命令を開始できます。したがって2[(1 - r) + 100r]n
、すべてのスレッドを完了するためにサイクルを必要とする代わりに、必要なのは。より少しだけである可能性があります[(1 - r) + 100r]n
。基本的に、待機中のスレッドを他のスレッドとオーバーラップさせる余地があるため、無料でスレッドを追加できます。
これがGPUモデルの大きな強みです。長いレイテンシーを克服するための大規模な並列処理です。少しの作業を行うには長い時間がかかりますが、それ以上の作業を行うのにそれほど時間はかかりません。r
占有率(レイテンシーを隠す準備ができている(スレッド内の)作業量に関連する)は、算術強度(上記の式に関連する)が高い場合のピークパフォーマンスにとってそれほど重要ではないことに注意してください。CUDA Occupancy Calculatorをいじって、さまざまなシナリオで説明した効果を確認することができます。