FPGA開発日記

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

自作CPUにシンプルなデータプリフェッチャを実装する (2. 性能向上の確認)

前回のデータ・プリフェッチャで性能が向上しない問題。いろいろと解析した。

1つは、プリフェッチ生成時のバンド幅の問題。プリフェッチの生成により複数のプリフェッチ・リクエストが生成される場合、そこで前方のパイプラインが停止してしまってはならない。

なので、学習テーブルからプリフェッチのリクエストが生成されると、一度それをFIFOに入れて、バッファリングする必要がある。

さらに、バッファリングしたリクエストをフィルタにかけて、過去に生成したプリフェッチ・リクエストから同じものを生成しないようにパイプラインの最適化を行う必要がある。

この結果、L2キャッシュへのレイテンシを200とした場合、memcpyプリフェッチテストの結果は以下のようになった。約27%の性能向上だ。 #L2キャッシュといいつつL2キャッシュがDRAMみたいな構成なので、DRAMのレイテンシだと考えて良いと思う。

cycle memcpy (64kB) Performance Improvement
Prefetch ON 88,109 1.27
Prefetch OFF 112,093 1.00

ちなみに、L2キャッシュへのレイテンシを10としている場合、以下のようであり、性能の向上はほとんどない。

cycle memcpy (64kB) Performance Improvement
Prefetch ON 13,368 1.00
Prefetch OFF 13,368 1.00
MSHRが充填されている様子。