FPGA開発日記

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

自作RISC-V OoOコアの分岐予測性能解析 (BIMによる性能向上解析)

f:id:msyksphinz:20211004232850p:plain

ちまちまと自作RISC-Vコアを実装している。DhrystoneがPASSできるようになったが、まだまだ性能的にはひどいもんだ。

BTBとBIMがDhrystoneをある程度動かせるようになってきたので、性能を見てみた。 Dead状態になるコミットはかなり減ってきた。ただしまだ全体の内1/4はパイプラインフラッシュによって殺されている。

分岐予測失敗のうち、Conditional Branchによる失敗はかなり減ってきた。次に問題となるのはReturn命令だ。 RASの実装が足りていないのがここに来てボトルネックになっている。これを実装して行こう。

"               24386" : {
  "commit" : {  "cmt" :   339,   "inst" :  1109,   "dead" :   150  },
  "icache" : {  "request" :   733,   "hit" :   733,   "miss" :     0  },
  "dcache" : {
    "port[0]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[1]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[2]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[3]" : {    "req" :   141,     "hit" :   108,     "miss" :     0,     "conflict" :    33    }
    "port[4]" : {    "req" :   279,     "hit" :   219,     "miss" :     0,     "conflict" :    60    }
    "port[5]" : {    "req" :   189,     "hit" :   116,     "miss" :     0,     "conflict" :    73    }
  },
  "branch" : {    "execute" :   317,     "cmp" : { "execute" :   193, "hit" :   177 },     "uncond" : { "ret" : { "execute" :    55, "hit" :    35}, "others" : { "execute" :    69, "hit" :    69 }},   },
}
"               28386" : {
  "commit" : {  "cmt" :   333,   "inst" :  1094,   "dead" :   143  },
  "icache" : {  "request" :   743,   "hit" :   743,   "miss" :     0  },
  "dcache" : {
    "port[0]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[1]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[2]" : {    "req" :     0,     "hit" :     0,     "miss" :     0,     "conflict" :     0    }
    "port[3]" : {    "req" :   157,     "hit" :   114,     "miss" :     0,     "conflict" :    43    }
    "port[4]" : {    "req" :   301,     "hit" :   221,     "miss" :     0,     "conflict" :    80    }
    "port[5]" : {    "req" :   203,     "hit" :   119,     "miss" :     0,     "conflict" :    84    }
  },
  "branch" : {    "execute" :   308,     "cmp" : { "execute" :   186, "hit" :   172 },     "uncond" : { "ret" : { "execute" :    56, "hit" :    35}, "others" : { "execute" :    66, "hit" :    66 }},   },
}