FPGA開発日記

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

Gather/Scatterのような不連続なメモリアクセスについてどのようにプリフェッチを出すか (IMP) (4. 部分キャッシュ・ライン・アクセス)

IMP: Indirect Memory Prefetcherという論文があり、これはGather/Scatterに対してどのようにプリフェッチを出すかというものを提案した論文になっている。ちょっと読んでまとめてみようと思う。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

https://ieeexplore.ieee.org/document/7856597


4. 部分キャッシュ・ライン・アクセス

IMPが対象とするアプリケーションは、時間的な局所性に加えて、空間的な局所性も低い。このため、L1Dキャッシュはミスする可能性が高い。 また、間接アクセスは最終的にキャッシュラインの一部しか消費しない可能性が高いため、完全なキャッシュラインを退避させてしまう可能性が高い。 幾つかの研究では、セクタ・キャッシュと部分キャッシュ・ライン・アクセスによってこの問題を解決する方法を提案している。 我々の方式では、部分的に消費されるキャッシュラインも間接的にアクセスされるため、間接的なメモリアクセスについては部分的なアクセスのみを考慮し、粒度予測論理をIMPに組み込む。

4.1 セクタキャッシュ

キャッシュ・ラインをさらにサブ・キャッシュラインに分割し、その粒度でアクセスをサポートするものである(図7)。各キャッシュ・ラインは複数のセクタに分割され、各セクタには有効ビットがある。キャッシュラインにヒットした場合、ヒットしたサブ・キャッシュラインに応じて有効ビットをチェックする。キャッシュライン・ミスおよびセクタ・ミスの場合、キャッシュはセクタの一部のみを要求することができる。

図は本論文より引用

4.2 粒度予測器

セクタ・キャッシュの恩恵を受けるためには、キャッシュ・ミス毎にいくつのセクタを取り出す必要があるかを決定する必要がある。 最適なアクセス・サイズはアプリケーションと入力の両方に依存するため、動的に決定する必要がある。 そこで、IMPに粒度予測器(GP)を追加して、プリフェッチに最適的なセクタ数を予測する(図8)。

図は本論文より引用

IMPは間接アクセスパタンを見つけると、GPにエントリを割り当て、アクセス粒度をキャッシュライン全体に設定する。 IMPが間接的なプリフェッチを発行すると、GPは最大N個のプリフェッチされたキャッシュラインをランダムに選択して追跡する。 これらについて、GPはタグと、キャッシュライン内のどのセクタがデマンド・アクセスによって触られたかを記録し、適切なタッチ・ビット・ベクトルを設定する。