FPGA開発日記

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

BOOM (Berkeley Out-of-Order Machine) のマイクロアーキテクチャドキュメントを読む (8)

RISC-VのアウトオブオーダコアであるBOOM (Berkely Out-of-Order Machine) について勉強を進めている。以下のドキュメントを日本語に訳しながら読んでいくことにした。

docs.boom-core.org


命令発行ユニット

命令発行キュー は、まだ実行されていないディスパッチされた Micro-Ops(UOP) を保持します。 UOP のすべてのオペランドの準備が整うと、発行スロットはその”要求”ビットを1に設定します。 命令発行選択回路は、”request “信号をアサートしているスロットの発行を選択します。 UOP<Micro-Op (UOP) が発行されると、そのスロットはイシューキューから削除され、 次にディスパッチされた命令のためのスペースが確保されます。

BOOMでは、分割された命令発行キューを使用しています。 特定のタイプの命令は、固有の発行キュー(整数、浮動小数点、メモリ)に入れられます。

投機命令発行

まだサポートされていませんが、将来の設計では、パフォーマンスを向上させるために、 UOPs<Micro-Op (UOP) を投機的に発行することが選択されるかもしれません (例えば、ロード命令がキャッシュにヒットすると推測し、 ロードデータがバイパスネットワークで利用可能であると仮定して、 依存性のある:term:UOPs<Micro-Op (UOP) を発行するなど)。 このようなシナリオでは、投機的に発行された UOPs<Micro-Op (UOP) は、 投機が解消されるまで発行キューは削除できません。 投機的に発行された UOP<Micro-Op (UOP) のハザードが発生した場合、 投機されたウィンドウ内にあるすべての発行済み UOP<Micro-Op (UOP) を殺して、 発行キューから再送する必要があります。 さらに高度な技術も用意されています。

発行スロット

Fig. 17 は、発行キューから1つの 発行スロット を表示します。1

命令はイシュー・キューに ディスパッチ されます。 ここからは、すべてのオペランドの準備が整うのを待ちます (“p “はpresenceビットの略で、オペランドレジスタファイルに*存在していることを示します)。。

準備が整うと、発行スロットは “request “信号をアサートして、発行されるのを待ちます。

命令発行選択論理

Single Issue Slot

Fig. 17 A single issue slot from the Issue Queue.

各命令発行選択論理ポートは、発行キューの中で最初に利用可能な UOP<Micro-Op (UOP) を選択する静的優先順位エンコーダです。 各ポートは、そのポートが処理できる:term:UOP<Micro-Op (UOP) のみをスケジュールします (例えば、浮動小数点の UOP<Micro-Op (UOP) は、浮動小数点ユニットを管理するポートにのみスケジュールされます)。 これにより、お互いに同じ UOPs<Micro-Op (UOP) をスケジューリングできるポートに対して、 カスケード式のプライオリティ・エンコーダーが作成されます。

機能ユニット が利用できない場合、その機能ユニットは利用可能な信号を解除し、 その機能ユニットには命令が発行されません(例: パイプライン化されていない除算器)。

順序化されていない発行キュー

BOOMでは2つのスケジューリングポリシが使用可能です。

1つ目は、MIPS R10KスタイルのUn-ordered Issue Queueです。 ディスパッチされた命令は、最初に利用可能な命令キュースロットに配置され、 その命令が 発行 されるまでそこに留まります。 これは特に、予測できない分岐が優先度の低いスロットに置かれ、 ROBがいっぱいになって発行ウィンドウが空になるまで発行できないようなシナリオでは、 病的なほどパフォーマンスが低下する可能性があります。 分岐に続く命令は、分岐に 暗黙のうちに 依存しているだけなので、 ROBが満杯になること以外に、分岐を早く発行できる強制的な機能はありません。

順序付けされた発行キュー

2番目に利用可能なポリシーは、年齢順の発行キューです。 ディスパッチされた命令は、発行キューの一番下(優先順位が一番低い)に置かれます。 サイクルごとに、すべての命令が上にシフトされます(イシューキューは”折りたたみ式キュー”です)。 したがって、最も古い命令が最も高い発行優先度を持つことになります。 これにより、古い分岐や古いロードをできるだけ早くスケジューリングすることでパフォーマンスが向上しますが、 サイクルごとにすべてのイシューキューのスロットが読み書きされる可能性があるため、潜在的なエネルギーペナルティが発生します。

ウェイクアップ

BOOMのウェイクアップには、 fast ウェイクアップと slow ウェイクアップ(long latency wakeupともいう)の2種類があります。 ALU UOPs<Micro-Op (UOP) はバイパスネットワークを介してライトバックデータを送ることができるため、 発行されたALU UOPs<Micro-Op (UOP) は、発行された時点でそのウェイクアップをIssue Queueにブロードキャストします。

しかし、浮動小数点演算、ロード、可変レイテンシー演算はバイパスネットワークを経由せず、 代わりにライトバックステージでレジスタファイルポートからウェイクアップ信号が送られます。