FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Replay Queueのための"Replay: Unknown Features of the NetBurst Core"を読む

IntelNetBurstアーキテクチャに使われているReplay Queueについて調査している。

以下のドキュメントをざっと眺めている。

en.thethirdmedia.com


このドキュメントは、NetBurstアーキテクチャにおけるパイプラインの動作について説明している。 スケジューラと実行ユニットの間にいくつかの追加ステージが出現することが最大の特徴であり、スケジューラの主な仕事は、実行ユニットが常にビジー状態になるように、実行のための命令を送る必要がある。

特に、LD命令の実行時間が不明な場合のスケジューリングについて説明している。 Intelのエンジニアは、この問題に対処するためにReplayと呼ばれるソリューションを開発した。

はじめに

このドキュメントは、NetBurstコアのReplayシステムについて説明している。 Replayシステムは、演算が誤って実行された場合に再実行するためのシステムであり、L1キャッシュのミスやストアからロードへの不正な転送などが原因で起こることがある。 このシステムには、2つのパイプラインがあり、演算は両方のパイプラインを並行して進む。 また、命令は複数回リプレイに送ることができ、L2キャッシュのレイテンシが増加する可能性があることが強調されている。 また、スケジューラが空きスロットを利用して計算資源を効率的に使おうとしている。

無限Replay Loop

Replay Loopは、依存する命令の連続が「穴」にはまる場合に発生し、プログラムの性能推定に重要な影響を与える。 Pentium 4プロセッサには5つのスケジューラがあり、それぞれが異なるRepaly Loopを持っている。 Replay Loopは、実行リソースをブロックし、実効レイテンシを数百クロックにまで増加させる可能性がある。

Replayが発生すると、命令の実行が遅れ、他の独立した処理に使えたはずの実行リソースがブロックされるため、計算機資源の絶対的に非効率な浪費につながる。 また、Replayによって一連の命令がループし続けることになり、プログラムコードの最適化を妨げることがある。

さらに、Replayはプロセッサの性能を向上させるためのものではなく、むしろ、パイプラインが長くなったことの裏返しであり、投機実行の問題を解決するための補助的なメカニズムであると考えるべきだとされている。

Replay Loopが発生しないように、Replayに送信する操作に文書化されていない命令カウンターを使用することや、作成された「穴」が、リプレイされたコマンドの間の「穴」に、依存する連続したコマンドを侵入させないように、特別なテストを開発することも可能である。

リプレイはソフトウェア開発者が知らないことが多く、そのためにプログラムを最適化することができないことが多いため、注意が必要である。