ちょっと調べなければならなくなったので、メモ:
https://ieeexplore.ieee.org/document/7856594
- Efficiently Prefetching Complex Address Patterns
このプリフェッチャの概要として、キャッシュラインの差分の履歴を構築して、それらの履歴を使用して予測を行う。 VLDPは現在のPCを使用しない。 PCベースのプリフェッチャの性能を7.1%上回った。 PCを使用しないプリフェッチャの性能を5.8%上回った。
まず、プリフェッチャのポイントを整理する。プリフェッチャは、制度とカバレッジのトレードオフをうまくとっていく必要がある。
現状のプリフェッチャの問題点を、いくつかの例を挙げて説明する。 単一の履歴の差分であれば簡単に予測できるが、複数のシーケンスが絡んでいる場合は難しい。 例えば、 のようなもの。 これをデルタとして見ると、 が繰り返して発生していることがわかる。これを特定できれば良い。
ここまでで、プリフェッチャの重要な機能をまとめる:
- 物理ページの福栖のストリームを追跡する機能。
- 新しいアクセスアドレスをウィンドウ内の複数の先頭アドレスを比較して、ストリームを特定する機能。
ストリーム・プリフェッチャにはこの機能がない。 AMPMプリフェッチャにはこの両方の機能をサポートしている。
一方で、AMPMプリフェッチャの欠点は、トレーニング時間。上記のアドレスシーケンスにおいて、AMPMのもっとも早いプリフェッチ時間は と となる。
VLDPは+25と-24の差分が繰り返されるということを記憶する。
- VLDPは複雑なマルチ・デルタ・アクセスパタンの予測を可能にする。
- ページ単位で動作し、ページごとに異なる複雑なパタンをプリフェッチできる。
- 複数のグローバル予測テーブルを使用し、多くのページに共通するアクセスパタンを学習できる。
- 様々な長さの差分履歴によってインデックス化され、予測表で見つかった最長履歴の一致を使用して、最も正確な予測を行う。
いくつかの比較対象としての既存のプリフェッチャをまとめる:
フィードバック指向プリフェッチ(FDP): FDPは、ストリームプリフェッチャの基本にフィードバック機能を追加し、プリフェッチの度合いを調整する。 メモリページへの近接アクセスを観察し、続くアクセスでどれだけのキャッシュ行をプリフェッチするかを決定する。 FDPはプリフェッチの精度や遅延、キャッシュ汚染を測定し、それらのメトリクスを基にプリフェッチの範囲と距離を調整する。
アクセス・マップ・パターン・マッチング(AMPM): AMPMは、メモリの大領域に対してキャッシュラインの状態を追跡する2ビット値の配列を使用する。 この配列は、プリフェッチのアドレスを生成するためのパターン解析に役立つ。 初期状態では全てのビットが0で、デマンドアクセスのあった行がマークされる。 ストライドパターンに基づく3回のアクセスを必要とし、領域ごとに独立して初期化が必要。
サンドボックスプリフェッチ(SBP): SBPは、実際のメモリ階層を使用せずに複数のアグレッシブプリフェッチャをテストするためのサンドボックス環境で動作する。 プリフェッチの評価は、ブルームフィルタにプリフェッチアドレスを置くことで行われる。 評価中のプリフェッチャがアクセス可能かを判断するため、デマンドキャッシュアクセスはこのブルームフィルタを確認する。 最もヒット数が多いプリフェッチャが選択され、実際のプリフェッチを発行する。
GHB (グローバルヒストリーバッファ) : プリフェッチアルゴリズムのフレームワークとして使用される。 GHBは循環バッファであり、キャッシュミスが発生するたびに新しいエントリが追加される。 インデックステーブルは、GHBへのポインタを持ち、PCを用いて検索が可能。 GHB内のエントリは、最後のキャッシュミスからの差分と次のインスタンスへのポインタから成る。 GHBは以前のデルタを再生することが可能。
SMS (空間メモリ・ストリーミング) の要点 : メモリ領域へのロード命令のPCとその領域でのキャッシュミスを関連付ける。 アクティブ・ジェネレーション・テーブル (AGT) には新しいエントリが作成され、パターン履歴テーブル (PHT) にはパターンが格納される。 PHTは、キャッシュミスのパターンを用いてデータをプリフェッチするための情報を提供する。 当初の提案ではL1レベルでのプリフェッチを想定していたが、L2レベルでの動作となっている。