分岐予測は設計経験がないうえにいろいろ試行錯誤しながら作っているのだが、なかなか性能が伸びない。 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が近すぎるとうまくヒットできていない。しかしこれは構成上仕方ないか...?