Kepler ホワイトページによると、Kepler ベースの GPU のワープ サイズは 32 で、各マルチプロセッサには、選択されたワープから 2 つの独立した命令を選択する 4 つのワープ スケジューラが含まれています。これは、各クロック サイクルで 32*4*2 = 256 回の計算が実行されることを意味しますが、マルチプロセッサには 192 個の ALU しか含まれていません。これらの計算はどのように実行されますか?
1 に答える
実際のホワイトペーパーの文言は次のとおりです。
SMX は、ワープと呼ばれる 32 個の並列スレッドのグループでスレッドをスケジュールします。各 SMX には 4 つのワープ スケジューラと 8 つの命令ディスパッチ ユニットがあり、4 つのワープを同時に発行して実行できます。Kepler のクワッド ワープ スケジューラは 4 つのワープを選択し、ワープごとに 2 つの独立した命令を各サイクルにディスパッチできます。
解釈は、任意のサイクルで、最大 4 つのワープをスケジュールできるということです。これらの 4 つのワープのそれぞれについて、ワープごとに (最大で) 2 つの独立した命令をディスパッチできます。「発送可能」と「発送予定」は違います。
あなたが言及している192個のALUは、単精度浮動小数点算術演算に関連しています(この議論の目的のためのSPユニット)。ただし、SM(X) には、倍精度浮動小数点演算ユニット (DP ユニット)、ロード/ストア ユニット (LD/ST ユニット)、およびその他のユニットなど、他の機能ユニットがあります。上記のリンク先のホワイトペーパーの 8 ページにある図を参照してください。特定の命令セットがすべて SP ユニットを使用している場合、8 つの命令をスケジュールできず、最大で 6 つ (32x6=192) をスケジュールできます。ただし、命令ミックスにさまざまなタイプの独立した命令 (ロード、ストア、SP ops など) が含まれている場合、192 SP ユニットという制限は、特定のサイクルで実際にスケジュールされる命令の数を決定する要因になるとは限りません。
要するに、1 サイクルあたり 8 命令 (2 命令/スケジューラ x 4 スケジューラ) が、SM(X) ごとに可能な最大命令発行率です。実際のコードは、必ずしもこれを達成するとは限りません。ストール/スタベーション状態により、特定のサイクルで命令が発行されない可能性は十分にあります。