FPGA開発日記

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

自作CPUにuBTBを搭載して分岐予測を高速化する検討

現在の自作CPUは分岐予測にGShareを使用しており、2サイクルをかけて予測を行う。 したがって分岐予測を行うと常に1サイクルのバブルが入る仕組みになっており、したがってそこで性能が律速される仕組みになっている。 簡単なものでいいのでuBTBを積み込んで、そちらで予測できるものは予測できるようにする。

uBTBが用意しなければならないのは、以下の機能だった: - 入力:現在のPC (キャッシュライン単位で取得する場合は、そのキャッシュラインの先頭か、キャッシュラインの途中) - 出力:そのブロック内で分岐が発生する場合、その分岐先のPC

で、さらに精度の高い分岐予測を行うために、1サイクル後のGshareの分岐予測で異なる予測をしている場合は上書きする。

さらに気を付けなければならないのは、1つのキャッシュラインに複数の分岐予測がある場合で、キャッシュラインの先頭からフェッチする場合でない場合、最も近い分岐するPCを選択する必要がある。

以下のように、キャッシュブロックの先頭からフェッチしている場合、最も近い分岐命令のジャンプ先が選ばれる。

一方で、ブロックの途中からフェッチしている場合は、そこから最も近い分岐命令のジャンプ先が選ばれる。

これにより、Dhrystoneのサイクル数は約5%程度短縮された。

cycle rate
Only Gshare 110845 1.0
Gshare+uBTB 104783 0.945