FPGA開発日記

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

自作RISC-V CPUコア実装(データキャッシュバンク化の効果)

自作CPUの実装、ロードストア命令のバンク化を実現した結果分岐予測の性能ボトルネックが明らかになった。

性能ボトルネックになっているのは、s0ステージで命令フェッチ、s2ステージで分岐先を予測とということで合計2サイクル分岐予測に必要だったため、命令ディスパッチ幅(5命令)以内の分岐命令の場合予1サイクルバブルが発生してしまい性能が向上できない。

そこで、試験的にBTBとBIMの適用をs2ステージからs1ステージに移動して分岐先を1サイクル速くアップデートするように変更する。 まだRASの方を1サイクル縮めていないので完全に検証は出来ていないのだが、単純なループならば動くようになった。

    .section    .text
_start:
    la      x1, data
    addi    x2, x1, 256/8
    li      x20, 500
loop:
    ld      x10,  0(x1)
    ld          x11,  0(x2)
    addi    x20, x20, -1
    bne     x20, zero, loop

#include "common_pkg.S"

    TEST_FINISH

一応、これまでの動作に比べてバブルが無くなり、バンク化した効果がベンチマークで顕著に見えるようになってきた。

f:id:msyksphinz:20211114220631p:plain

同じプログラムを流して、

  • バンク化+分岐予測1サイクル:1692サイクル / 2021命令
  • 非バンク化+分岐予測1サイクル:2121サイクル / 2021命令

割と顕著に性能差が出た。まあこれは小ループだからかな。