FPGA開発日記

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

自作RISC-V OoOコアの分岐予測性能解析 (RASの実装改善)

分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。 RASの実装についていろいろ考えなおして、やっとこさある程度安定して動きそうな構成を見つけてきた。 Dhrystoneはまだ完走していないが、殆ど完走できるくらいのところまで来ている。 一応PerformanceのDumpを取ると、多少は改善してきている。

いろいろと難しいところはあるが、Dumpの結果ヒット率は60%を超えてきている。

13:  "branch" : {    "execute" :   192,     "cmp" : { "execute" :   171, "hit" :   159 },     "uncond" : { "ret" : { "execute" :    10, "hit" :     9}, "others" : { "execute" :    11, "hit" :     0 }},   },
26:  "branch" : {    "execute" :   144,     "cmp" : { "execute" :   108, "hit" :    86 },     "uncond" : { "ret" : { "execute" :    17, "hit" :    11}, "others" : { "execute" :    19, "hit" :     7 }},   },
39:  "branch" : {    "execute" :   308,     "cmp" : { "execute" :   243, "hit" :   234 },     "uncond" : { "ret" : { "execute" :    33, "hit" :    20}, "others" : { "execute" :    32, "hit" :    32 }},   },
52:  "branch" : {    "execute" :   291,     "cmp" : { "execute" :   218, "hit" :   208 },     "uncond" : { "ret" : { "execute" :    37, "hit" :    23}, "others" : { "execute" :    36, "hit" :    36 }},   },
65:  "branch" : {    "execute" :   293,     "cmp" : { "execute" :   232, "hit" :   219 },     "uncond" : { "ret" : { "execute" :    31, "hit" :    22}, "others" : { "execute" :    30, "hit" :    30 }},   },
78:  "branch" : {    "execute" :   315,     "cmp" : { "execute" :   235, "hit" :   225 },     "uncond" : { "ret" : { "execute" :    39, "hit" :    29}, "others" : { "execute" :    41, "hit" :    41 }},   },
91:  "branch" : {    "execute" :   306,     "cmp" : { "execute" :   242, "hit" :   230 },     "uncond" : { "ret" : { "execute" :    32, "hit" :    24}, "others" : { "execute" :    32, "hit" :    32 }},   },
104:  "branch" : {    "execute" :   300,     "cmp" : { "execute" :   224, "hit" :   213 },     "uncond" : { "ret" : { "execute" :    38, "hit" :    27}, "others" : { "execute" :    38, "hit" :    38 }},   },
117:  "branch" : {    "execute" :   332,     "cmp" : { "execute" :   260, "hit" :   250 },     "uncond" : { "ret" : { "execute" :    37, "hit" :    26}, "others" : { "execute" :    35, "hit" :    35 }},   },
130:  "branch" : {    "execute" :   317,     "cmp" : { "execute" :   247, "hit" :   236 },     "uncond" : { "ret" : { "execute" :    35, "hit" :    25}, "others" : { "execute" :    35, "hit" :    35 }},   },
143:  "branch" : {    "execute" :   315,     "cmp" : { "execute" :   234, "hit" :   224 },     "uncond" : { "ret" : { "execute" :    40, "hit" :    29}, "others" : { "execute" :    41, "hit" :    41 }},   },
156:  "branch" : {    "execute" :   310,     "cmp" : { "execute" :   245, "hit" :   235 },     "uncond" : { "ret" : { "execute" :    33, "hit" :    24}, "others" : { "execute" :    32, "hit" :    32 }},   },
169:  "branch" : {    "execute" :   298,     "cmp" : { "execute" :   223, "hit" :   211 },     "uncond" : { "ret" : { "execute" :    37, "hit" :    27}, "others" : { "execute" :    38, "hit" :    38 }},   },
182:  "branch" : {    "execute" :   319,     "cmp" : { "execute" :   250, "hit" :   240 },     "uncond" : { "ret" : { "execute" :    35, "hit" :    25}, "others" : { "execute" :    34, "hit" :    34 }},   },
195:  "branch" : {    "execute" :   326,     "cmp" : { "execute" :   253, "hit" :   241 },     "uncond" : { "ret" : { "execute" :    37, "hit" :    27}, "others" : { "execute" :    36, "hit" :    36 }},   },
208:  "branch" : {    "execute" :   317,     "cmp" : { "execute" :   236, "hit" :   226 },     "uncond" : { "ret" : { "execute" :    40, "hit" :    29}, "others" : { "execute" :    41, "hit" :    41 }},   },
221:  "branch" : {    "execute" :   316,     "cmp" : { "execute" :   248, "hit" :   238 },     "uncond" : { "ret" : { "execute" :    33, "hit" :    23}, "others" : { "execute" :    35, "hit" :    35 }},   },
234:  "branch" : {    "execute" :   326,     "cmp" : { "execute" :   254, "hit" :   243 },     "uncond" : { "ret" : { "execute" :    36, "hit" :    27}, "others" : { "execute" :    36, "hit" :    36 }},   },

もうちょっとヒット率を上げないと使い物にならないが、傾向としてはCALLとRETが近すぎるとうまくヒットできていない。しかしこれは構成上仕方ないか...?

f:id:msyksphinz:20211108001007p:plain
f:id:msyksphinz:20211004232850p:plain