自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。 RASの修正を行って、簡単なテストケースならば想定通りに動作するようになったのだが、Dhrystoneではほとんど性能が向上しなかったので、もう少し複雑なテストケースでRASの動作を確認する。
func1
とfunc2
で交互に呼び出しながらRASを埋めていくようにする。
0000000080000018 <func1>: 80000018: 02050663 beqz a0,80000044 <_func_fin1> 8000001c: fe010113 addi sp,sp,-32 # 7ffe0 <_start-0x7ff80020> 80000020: 00a13023 sd a0,0(sp) 80000024: 00113423 sd ra,8(sp) 80000028: fff50513 addi a0,a0,-1 8000002c: 01c000ef jal ra,80000048 <func2> 80000030: 00813083 ld ra,8(sp) 80000034: 00013683 ld a3,0(sp) 80000038: 02010113 addi sp,sp,32 8000003c: 00d50533 add a0,a0,a3 80000040: 00008067 ret 0000000080000044 <_func_fin1>: 80000044: 00008067 ret 0000000080000048 <func2>: 80000048: 02050663 beqz a0,80000074 <_func_fin2> 8000004c: fe010113 addi sp,sp,-32 80000050: 00a13023 sd a0,0(sp) 80000054: 00113423 sd ra,8(sp) 80000058: fff50513 addi a0,a0,-1 8000005c: fbdff0ef jal ra,80000018 <func1> 80000060: 00813083 ld ra,8(sp) 80000064: 00013683 ld a3,0(sp) 80000068: 02010113 addi sp,sp,32 8000006c: 00d50533 add a0,a0,a3 80000070: 00008067 ret 0000000080000074 <_func_fin2>: 80000074: 00008067 ret
RASの積み上がり具合を確認していく。一応、積みあがっているように見える。
ただし、予測器は殆どMispreditionを出している。これはどこかに不具合があるに違いない。