FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

UCBのAdvanced Computer Architectureの講義資料を読む(10. 複数命令発行の技術)

コンピュータアーキテクチャの論文を読んでいたのだが、どうもよく知らない項目がある。 よく考えてみたらコンピュータアーキテクチャの最新トレンドも含め最近勉強量が不足していたので、ここらへんでもう一度復習しておきたい。 せっかくなので海外の大学の講義資料を読んでみよう。

  • Advanced Computer Architecture

https://www.ece.ucsb.edu/~strukov/ece154BSpring2018/home.htm

目次

Advanced Computer Architecture

6. 複数命令発行

CPI<1を達成するためには、1命令あたりに複数の命令を発行する必要がある。このための解決方法として

  • 静的にスケジューリングされるスーパスカラプロセッサ
  • VLIW(Very long instruction worrd)プロセッサ
  • 動的にスケジューリングされるスーパスカラプロセッサ

がある。順に紹介する。まずは、複数命令を発行するための技法についてまとめる。

名前 命令発行方針 ハザード検出 スケジューリング 特徴
スーパスカラ(静的) 動的 ハードウェア 静的 インオーダ実行 組み込み業界で使用される。MIPS, ARM, Cortex-A8
スーパスカラ(動的) 動的 ハードウェア 動的 いくつかはアウトオブオーダ実行。ただし投擲的実行はしない 存在しない。
スーパスカラ(投機的実行) 動的 ハードウェあ 投機的実行を使用した動的 投機的アウトオブオーダ実行 Intel Core i3, i5, i7, AMD Phenom, IBM Power 7
VLIW/LIW 静的 主にソフトウェア 静的 全てのハザードはコンパイラにより検出され調整される。 信号処理プロセッサ。TI C6xなど。
EPIC 主に静的 主にソフトウェア ほとんど静的 全てのハザードはコンパイラにより明示的に検出され調整される。 Itanium

VLIWプロセッサ

複数の演算を1つの命令にまとめ上げる。

  • 1つの整数命令(もしくは分岐命令)
  • 2つの独立した浮動小数点演算
  • 2つの独立したメモリ参照命令

コード内に十分な並列性を取得できる必要がある。VLIWの問題点としては、

  • 静的に並列性を検出する必要がある。
  • コードサイズが増加する傾向にある。
  • ハードウェアによるハザード検出する機構が無い。
  • バイナリコードの互換性がない。
f:id:msyksphinz:20200320225712p:plain

投機的実行を使用した動的スケジューリング、複数命令発行

現代のマイクロアーキテクチャが採用している手法。実現するためには、2つの方法がある。

  • リザベーションステーションを割り当て、クロックの半分でパイプライン制御テーブルをアップデートする。
    • 2命令/クロックしかサポートされない。
  • 命令間の依存関係を処理するための論理を実装する。
  • ハイブリッドな手法

命令発行ロジックがボトルネックとなりうる。

発行する命令の組を「バンドル」と呼ぶ。バンドル内のすべての命令の依存関係について検出する必要がある。もし依存関係がバンドル内に存在すれば、リザベーションステーション内でそれらを表現する。さらに複数かんりょう・複数コミットをサポートさせる。

ILPの限界(理想状態)

f:id:msyksphinz:20200320225336p:plain

実際のベンチマークではこのようになる。

f:id:msyksphinz:20200320225347p:plain

マルチスレッドアーキテクチャのモチベーション

ハードウェアのもつ最大性能を達成することができない原因として、70年代まではメモリのレイテンシの影響が要因だった。しかし90年代になると、並列ハードウェアが複雑になっても、性能ハードウェアの複雑性に対して線形に増加しないという問題が発生した。

  • 命令発行バンド幅が増加している。
  • 機能ユニットの数が増加している。
  • 命令がアウトオブオーダで実行され、インオーダで完了する。

これだけのハードウェアを投入すると、プロセッサのハードウェア使用率は減少し、命令発行幅に比例して命令のスループットが増加しなくなる。

したがって、一般的な解決方法としてよりスマートなキャッシュや、より精度の高い分岐予測器の実装が挙げられた。

しかし、マルチスレッドプロセッサは全く異なるスレッドの独立した命令を同時に実行することで、プロセッサのストール要因を削減する。1つのスレッドだけでなく、複数スレッドのハードウェアを持つ。

  • レジスタ
  • プログラムカウンタ
  • 各スレッド状態は「ハードウェアコンテキスト」と呼ばれる。

ソフトウェアのコンテキストスイッチングを行うことなく複数の命令ストリームを実行することで、ハードウェアの使用率を向上させる。

f:id:msyksphinz:20200320225400p:plain

細粒度マルチスレッディングでは、CPUのスレッドを1サイクル毎に切り替えることでオーバヘッドを最小化する。これにより、各スレッド間のストールを隠蔽する。

f:id:msyksphinz:20200320225411p:plain

粗粒度マルチスレッディングでは、CPUの1スレッドがストールすると、別のスレッドの命令を毎サイクル発行する。

f:id:msyksphinz:20200320225423p:plain

同時マルチスレッディングでは、同じパイプラインステージに複数のスレッドの命令が混在することを許可する。

f:id:msyksphinz:20200320225643p:plain
f:id:msyksphinz:20200320225657p:plain
  1. 粗粒度マルチスレッディング
    • 長いレイテンシの演算(L2キャッシュミスなど)が実行された際にスレッドを切り替える。
    • キャッシュミスを処理している最中に、他のスレッドが実行される。
    • 命令スループットは若干向上するが、ミスが発生しても命令の実行時間は長くならない。
      • 短いレイテンシの演算レイテンシを隠すことはない。
      • スレッドを切り替えることによるパイプラインを埋める必要がある。
      • 長いレイテンシの演算が無ければ、スレッドは切り替わらない。
    • HEP ,IBM RS64 III
  2. 細粒度マルチスレッディング
    • サイクル毎にスレッドを切り替える(通常はラウンドロビン
    • 全ての要因でレイテンシを隠蔽する。
    • 命令スループットを大きく向上させるが、各スレッドの実行時間は長くなる。
  3. 同時マルチスレッディング(SMT)
    1. 複数の命令を複数のスレッドから同じサイクルに発行する。
    2. ハードウェアのコンテキストスイッチングは行われない。
    3. 各スレッドの実行時間を増価させることなく、命令のスループットを向上させる。