3

GTX 4xx、5xx(Fermi)には動的スケジューリングがあり、GTX 6xx(Kepler)は静的スケジューリングに切り替えられました。

  • GPUのコンテキストでの静的および動的スケジューリングとは何ですか?
  • 静的と動的の設計上の選択は、実際のコンピューティングワークロードのパフォーマンスにどのように影響しますか?
  • 静的または動的スケジューリングのアルゴリズムを最適化するためにコードで実行できることはありますか?
4

1 に答える 1

3

ハードウェアでの静的/動的命令スケジューリングを参照していると思います。

動的な命令スケジューリングとは、プロセッサが実行時に個々の命令を並べ替えることができることを意味します。これには通常、命令パイプラインにあるものすべての最適な順序を予測しようとするハードウェアが少し含まれます。あなたが言及したGPUでは、これは個々のワープごとに命令を並べ替えることを意味します。

動的スケジューラから静的スケジューラに切り替える理由は、GK110アーキテクチャホワイトペーパーで次のように説明されています。

また、SMXワープスケジューラロジックのパワーを最適化する機会も探しました。たとえば、KeplerスケジューラとFermiスケジューラの両方に、次のようなスケジューリング機能を処理するための同様のハードウェアユニットが含まれています。

  • 待ち時間の長い操作(テクスチャとロード)のスコアボードを登録する

  • ワープ間スケジューリングの決定(たとえば、適格な候補の中から次に進むのに最適なワープを選択する)

  • スレッドブロックレベルのスケジューリング(GigaThreadエンジンなど)

ただし、Fermiのスケジューラには、数学データパス自体のデータハザードを防ぐための複雑なハードウェアステージも含まれています。マルチポートレジスタスコアボードは、有効なデータがまだ準備できていないレジスタを追跡し、依存関係チェッカーブロックは、スコアボードに対して完全にデコードされた多数のワープ命令全体のレジスタ使用量を分析して、発行に適格なレジスタを決定します。

Keplerの場合、この情報は決定論的である(数学パイプラインのレイテンシーは可変ではない)ため、コンパイラーは、命令を発行する準備ができる時期を事前に決定し、この情報を命令自体に提供することができます。これにより、いくつかの複雑で電力を消費するブロックを、事前に決定されたレイテンシ情報を抽出し、それを使用してワープ間スケジューラの段階で適格性からワープをマスクする単純なハードウェアブロックに置き換えることができました。

つまり、基本的には、効率のためにチップの複雑さ、つまりより単純なスケジューラーを交換しています。しかし、その潜在的に失われた効率は、少なくとも数学パイプラインについては、最良の順序を予測できるコンパイラーによって検出されるようになりました。

最後の質問、つまり静的または動的スケジューリングのアルゴリズムを最適化するためにコードで何ができるかについては、私の個人的な推奨事項は、インラインアセンブラを使用せず、コンパイラ/スケジューラに任せることです

于 2013-02-03T15:27:09.957 に答える