自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードが性能ボトルネックになっているのを見た。Dhrystoneの実行に当たりしばらくデバッグしていたのだが、いろいろ試行錯誤してようやくまともに動作するようになってきた気がする。
LDQ/STQ間フラッシュインタフェースを適用することで、もともとの実装に対してどれくらい性能が向上したのかを見てみよう。
- LDQ/STQフラッシュインタフェース実装前
$ grep "ISS MCYCLE" dhrystone.riscv.log ISS MCYCLE is updated to RTL = 000000000000075b ISS MCYCLE is updated to RTL = 00000000000007a8 ISS MCYCLE is updated to RTL = 0000000000069437 ISS MCYCLE is updated to RTL = 0000000000069457
STARTからSTOPまでのサイクル数は0x69457-0x7a8 = 0x68caf
= 429,231 (10進数) だった。
これをフラッシュインタフェース実装した場合で同様に性能測定してみる。
$ grep "ISS MCYCLE" dhrystone.riscv.log ISS MCYCLE is updated to RTL = 000000000000036e ISS MCYCLE is updated to RTL = 00000000000003a2 ISS MCYCLE is updated to RTL = 000000000002dd13 ISS MCYCLE is updated to RTL = 000000000002dd2d
STARTからSTOPまでのサイクル数は0x2dd13 - 0x3a2 = 0x2d971
= 186,737 (10進数) だった。
おお、かなり速くなったなあ。
次の課題は、それ以外のテストケースのデバッグと、CALL/RETの最適化が未完なのでこれを見てみよう。