15

注: この質問は、nVIDIA Compute Capability 2.1 デバイスに固有のものです。次の情報は、CUDA プログラミング ガイド v4.1 から取得されます。

コンピューティング機能 2.1 デバイスでは、各SMに整数および浮動小数点演算用の48 個のSP (コア) があります。ワープは 32 の連続したスレッドで構成されます。各 SM には 2 つのワープ スケジューラがあります。命令が発行されるたびに、1 つのワープ スケジューラがスレッドの準備が整ったワープを選択し、コアのワープに対して2 つの命令を発行します。

私の疑問:

  • 1 つのコアで 1 つのスレッドが実行されます。1 つのクロック サイクルまたは 1 つのマルチサイクル操作で、デバイスが 1 つのスレッドに 2 つの命令を発行するにはどうすればよいですか?
  • これは、2 つの命令が互いに独立している必要があることを意味しますか?
  • おそらくコアで異なる実行ユニットを使用するため、2つの命令をコアで並行して実行できるのでしょうか? これはまた、2 つの命令の実行が終了した後にのみワープが準備できることを意味しますか、それともそのうちの 1 つの後ですか?
4

1 に答える 1

24

これが命令レベルの並列処理 (ILP)です。ワープから同時に発行される命令は、互いに独立している必要があります。これらは、SM 内の機能ユニットを分離するために SM 命令スケジューラによって発行されます。

たとえば、ワープの命令ストリームに発行可能な 2 つの独立した FMAD 命令があり、SM にそれらを発行できる FMAD ユニットの 2 つの使用可能なセットがある場合、それらは両方とも同じサイクルで発行できます。(命令はさまざまな組み合わせでまとめて発行できますが、覚えていないので、ここでは詳しく説明しません。)

SM 2.1 の FMAD/IMAD 実行ユニットは 16 SP 幅です。これは、ワープ (32 スレッド) 命令を 16 幅の実行ユニットの 1 つに発行するのに 2 サイクルかかることを意味します。これらの 16 幅の実行ユニット (合計 48 個の SP) は、SM ごとに複数 (3 つ) と、特殊機能ユニットがあります。各ワープ スケジューラは、サイクルごとに 2 つのワープ スケジューラに発行できます。

FMAD 実行ユニットがpipe_Apipe_Bおよびであると仮定しpipe_Cます。サイクル 135 で、2 つの独立した FMAD 命令がfmad_1ありfmad_2、待機しているとします。

  • サイクル 135 で、命令スケジューラは FMAD への前半ワープ (16 スレッド) とfmad_1FMADへpipe_Aの前半ワープfmad_2を発行しpipe_Bます。
  • サイクル 136 では、fmad_1will の前半のワープが FMAD の次のステージに移動し、pipe_A同様に、 will の前半のワープがfmad_2FMAD の次のステージに移動しpipe_Bます。ワープスケジューラーは、FMAD への後半ワープと FMAD への後半ワープを発行するようにfmad_1なりました。 pipe_Afmad_2pipe_B

したがって、同じワープから 2 つの命令を発行するには 2 サイクルかかります。しかし、OPが言及しているように、2つのワープスケジューラーがあります。つまり、このプロセス全体を別のワープからの命令に対して同時に実行できます(十分な機能ユニットがあると仮定します)。したがって、最大発行レートは、1 サイクルあたり 2 ワープ命令です。これはプログラマーの観点からの抽象化されたビューであることに注意してください。実際の低レベルのアーキテクチャの詳細は異なる場合があります。

ワープが次にいつ準備できるかについての質問については、未解決の (既に発行されているがリタイアしていない) 命令に依存しない命令がさらにある場合、それらは次のサイクルで発行できます。しかし、使用可能な命令のみが実行中の命令に依存するとすぐに、ワープは発行できなくなります。ただし、ここで他のワープの出番です。SM は、使用可能な (ブロックされていない) 命令を持つ任意の常駐ワープに対して命令を発行できます。ワープ間のこの任意の切り替えは、GPU が高スループットのために依存する「レイテンシの隠蔽」を提供するものです。

于 2012-03-27T10:03:33.613 に答える