FPGA開発日記

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

CPUの動的命令スケジューリング機構についてまとめる

いろいろ文献を読んだりして、CPUの命令スケジューリング機構の様々な手法についてまとめる。

スケジューラ:フロントエンドパイプラインとバックエンドパイプラインの中間に位置し、命令の発行をつかさどる

  • Wakeup Logic
    • 命令間の依存関係を管理し、どの命令が実行可能かを判断する
  • Select Logic
    • 実行可能と判断した命令の中から、実行ユニットに発行する命令を選択する
  • Payload RAM
    • 実行ユニットへの発行に必要な情報を補完する

ウェイクアップ論理の構成法

  • CAMを用いた手法
    • 連想アクセスに必要な比較器の数
      • ソースオペランドの個数\times スケジューラエントリ数\times 発行ポート数
  • マトリックス状のビットセル群を用いる手法
    • Matrix:正方形上のビットセル群
      • すべて0の場合はReady状態
        • 命令1に依存しているときは列1が1に設定される。
        • Wakeup Allocation Table:ディスパッチ時にProducer Matrixの初期値を作り出すために用いられるRAM
          • 命令が格納された行のそれぞれについて、ソースオペランドとなる物理レジスタを書き込みレジスタとする命令がどのエントリに存在しているかを示す。

投機的スケジューリングに必要なリカバリ操作

  • Schedulerによるリカバリ
    • 正しく実行・リカバリされたことを確認できるまでスケジューラの中にとどめておく
    • リカバリが容易
    • スケジューラのエントリが停滞しやすい
  • 専用バッファによるリカバリ
    • リカバリ用の専用バッファを設けてこれを使う
    • IntelのReplay Queue
    • 固定サイクル数だけ待つ。再実行したとしてももう一度リプレイに入ってしまう問題もある。
    • 単一のキューを用いる場合も存在する