FPGA開発日記

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

Alpha 21264に関する論文を読む (1. 概要とフロントエンド)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。

ieeexplore.ieee.org


The Alpha 21264 Microprocessor

Alpha 21264の高性能は、高いクロックスピードに起因している。

  • 多くのアウトオブオーダー投機的実行
  • 帯域幅のメモリシステム

アーキテクチャのハイライト

1サイクルに最大4つの命令をフェッチして実行できるスーパスカラマイクロプロセッサ

  • アウトオブオーダ実行機能を要する
  • 投機的実行をサポート
  • 高度な分岐予測と投機的・動的実行を組み合わせることで、1サイクルで最大4命令のフェッチにおいて、21164に対して21264は50%~200%処理が高速化されている
  • メモリサブシステムについては、多数の並列メモリ参照をサポートしている
  • クロック周波数は500~600MHz、0.35u CMOSプロセスによって実現されている。

図1. 21264のダイ写真。主要な部分を強調している。

図は本論文より引用

図2. 21264のパイプライン概要。21164はインオーダの7ステージから構成されている。21264は同様に7ステージだが、レジスタのリネームのためのマップステージが追加されている。

図は本論文より引用

命令パイプライン—フェッチ

命令パイプラインはフェッチステージから始まり、毎サイクル4命令をアウトオブオーダー実行エンジンに送出する。プロセッサは、ライン、ブランチ、ジャンプの予測を通じて投機的にフェッチします。予測は通常正確なので、この命令フェッチ実装は通常、機能ユニットを有用な作業で忙しくさせるために、グッドパス命令の連続したストリームを供給する。

フェッチステージから始まる命令パイプラインは、毎サイクル4命令をアウトオブオーダ実行エンジンに送出する。プロセッサは、ライン、分岐、ジャンプの予測を通じて投機的にフェッチする。

フェッチの効率を上げるために、ラインウェイ予測と、分岐予測がある。64Kバイトの2-wayセットアソシアティブ命令キャッシュにより、Alpha21164の8Kバイトダイレクトまぷ命令キャッシュと比較して、ヒット率が大幅に向上している。

ライン&ウェイ分岐予測

ライン&ウェイ分岐予測は、セットアソシアティブ動作とフェッチバブル除去の利点と、ダイレクトマップの高速アクセスを組み合わせた技術である。

4命令のフェッチブロックには、ライン&ウェイ予測が実装されており、次の4命令ブロックのフェッチ策を示すもので、どちらのウェイでフェッチするかを示している。

図3で示しているのは、命令のアドレスが決定されるとともに、次の命令でアクセスすべき命令キャッシュのラインとウェイを予測している。つまり、次のサイクルでアクセスすべきキャッシュラインとウェイを予測することにより、ダイレクトマップのように高速に命令キャッシュアクセスが可能となり、速度の向上につながる。

ループターミネータなどを実装する際にも、ミスペナルティを避けることができる。動的リンクされたライブラリルーチンをコールするレジスタ間接ジャンプ命令では、ラインプレディクタがターゲットを学習すると使用することができる。

命令キャッシュミスが発生すると、命令フェッチエンジンはL2キャッシュもしくはシステムメモリをフェッチする。

図は本論文より引用

分岐予測

21264において、分岐予測の性能はより重要なものとなる。その理由の一つに、分岐予測ミスが起きた際のペナルティが7サイクルもあり、前世代よりも大きくなっている。次に、命令実行エンジンが前世代よりも高速になっている点がある。最終的に、分岐予測を向上させることによりプロセッサの投機実行個効率的に動かすことができるようになる。

21164は20個のインフライトな命令を実行することが出来たが、21264は80個の命令を動かすことができる。このため、パイプラインフラッシュを起こさずに効率的に命令を実行し続けるつ分岐予測が需要である。

21264はトーナメント型の分岐予測機構を持っている。この構造は2種類の分岐予測器を動的に切り替える—1つはローカルヒストリを用いたもので、もう一つはグローバルヒストリを用いたものである。トーナメント分岐予測器により、それぞれの分岐予測器の独立した予測精度よりも高い精度を得ることができ、予測率は90%から100%程度となる。

さらに、ローカルとグローバルの相関関係を取る技術により、分岐予測ミスを減らすことができる。

図4は、トーナメント分岐予測器の詳細な構造を示している。2レベル構造を正しく理解しているかなぞだが、プログラムカウンタに応じて1024個のテーブルの中から1エントリを選ぶ。ここには10ビットが格納されており、当該プログラムカウンタにおける実行結果が格納されているという認識だ。この10ビットのパタンを元に2段目のLocal Predictionを実行し、最終的にローカル分岐予測の値を決定する。

グローバル分岐予測のほうは、全体のパス実行履歴(12ビット)を元に、グローバル分岐予測器にアクセスして飽和カウンタの値を取得する。結果的に、パスヒストリを元にどちらの分岐予測器を使用するかを決定し、その結果に基づいて分岐予測先を決定する。このパスヒストリは分岐予測ミスに備えてバックアップされる。