FPGA開発日記

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

IBM POWER7の論文を読む (5. Instruction Sequencing Unit)

マイクロアーキテクチャに関する論文を読んでいる。今回はIBM POWER7に関する論文。

ieeexplore.ieee.org

続いて命令シーケンスユニット。これはいわゆるフロントエンドから命令完了までを取り扱うユニットのことらしい。


命令シーケンスユニットの役割 (Instruction Sequence Unit)

  • Power7プロセッサはグループ単位で命令をディスパッチする。
  • グループをディスパッチする前に、すべてのグループ内の命令でリソースやリネームが完了している必要がある。
  • 同じスレッドから最大で2つの分岐命令と4つの非分岐命令を持つことができる。
    • 2番目の分岐命令がある場合、それはグループ内での最後の命令となる。
  • レジスタリネーム
  • ロードタグ(LTAG)・ストアタグ(STAG)
    • ロード命令とストア命令のフローを管理する。
    • LTAG
      • ロード命令に割り当てられたLRQ (Load-Reorder-Queue)エントリへのポインタに相当する。
    • STAG
      • ストア命令に割り当てられたSRQ(Store-Reorder-Queue)エントリへのポインタに相当する
    • ストアにおけるデータ命令とSRQのストアアドレス命令のマッチングにも使用される。
    • LRQの物理エントリが解放されると、仮想的なLTAGは、実LTAGに変換される。
    • SRQの物理エントリが解放されると、仮想STAGは実STAGに変換される。
    • 仮想STAG/LTAGは、その後発行キューにおいて実TAGであるとマークされるまで、LSUに発行されない。
  • Power7のエントリ
    • UQ(Unified Issue Queue): 48エントリ
    • BRQ(分岐発行キュー): 12エントリ
    • CRQ: 8エントリ
    • BRQとCRQは、ディスパッチされた命令がキューの先頭に置かれ、その後、キューの一番下に向かってトリクルダウンしていくシフトキューである(インオーダということ?)。
    • BRQ:分岐命令を含むキュー
      • 1サイクル当たり2つの分岐命令を受け取ることができる
    • CRQ: CR論理命令とSPRからの移動命令を含んでいる
      • 1サイクル当たり2命令を受け取り、1命令をIFUに発行する
    • UQ: 48エントリのキュー、24エントリずつ2つに分割されている
      • FXU, LSU, VSU, DFUで実行されるすべての命令が含まれる。
      • 上半分: VMX整数命令を含むFX0, LS0、VS0パイプライン用の命令が含まれる
      • 下半分: DFP, VMX PM, VSU, FX1, LS1, VS1パイプラインの命令が含まれる
      • UQは半分のキューにおいて1サイクル当たり最大で4つの命令を受け取ることができる
      • 64ビットVSUストア命令は、命令ディスパッチ時にアドレス生成(AGEN)とデータ操作に分割され、1サイクルで最大で8つの動作をUQに書き込むことができる。
    • ISUは、命令を追跡して完了させる責任を持っている。
      • ディスパッチ後のすべての命令をトレースするために、Global Completion Table(GCT)を持っている。
      • GCTは20エントリ、最大で120個の命令を管理することができる。
      • グループ内のすべての命令がFinishedとしてマークされ、そのグループが特定のスレッドで最も古い場合、そのグループは完了となる。
  • フラッシュについて
    • コアのフラッシュはISUによって処理される
    • 分岐予測ミス
    • LSアウトオブオーダ実行の失敗
    • コンテキスト同期命令の実行
    • 例外処理
    • 廃棄するグループについて20ビットのマスクにまとめ、フラッシュを管理する。