これが命令レベルの並列処理 (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_A
、pipe_B
およびであると仮定しpipe_C
ます。サイクル 135 で、2 つの独立した FMAD 命令がfmad_1
ありfmad_2
、待機しているとします。
- サイクル 135 で、命令スケジューラは FMAD への前半ワープ (16 スレッド) と
fmad_1
FMADへpipe_A
の前半ワープfmad_2
を発行しpipe_B
ます。
- サイクル 136 では、
fmad_1
will の前半のワープが FMAD の次のステージに移動し、pipe_A
同様に、 will の前半のワープがfmad_2
FMAD の次のステージに移動しpipe_B
ます。ワープスケジューラーは、FMAD への後半ワープと FMAD への後半ワープを発行するようにfmad_1
なりました。 pipe_A
fmad_2
pipe_B
したがって、同じワープから 2 つの命令を発行するには 2 サイクルかかります。しかし、OPが言及しているように、2つのワープスケジューラーがあります。つまり、このプロセス全体を別のワープからの命令に対して同時に実行できます(十分な機能ユニットがあると仮定します)。したがって、最大発行レートは、1 サイクルあたり 2 ワープ命令です。これはプログラマーの観点からの抽象化されたビューであることに注意してください。実際の低レベルのアーキテクチャの詳細は異なる場合があります。
ワープが次にいつ準備できるかについての質問については、未解決の (既に発行されているがリタイアしていない) 命令に依存しない命令がさらにある場合、それらは次のサイクルで発行できます。しかし、使用可能な命令のみが実行中の命令に依存するとすぐに、ワープは発行できなくなります。ただし、ここで他のワープの出番です。SM は、使用可能な (ブロックされていない) 命令を持つ任意の常駐ワープに対して命令を発行できます。ワープ間のこの任意の切り替えは、GPU が高スループットのために依存する「レイテンシの隠蔽」を提供するものです。