前回の続き。いろいろバグを潰しながら、メモリマップを変えつつバイナリを用意して、ついにDhrystoneを最後まで完走させることができた。さて問題の実行速度だが、Dhrystoneで測定してみることにする。比較対象はQEMU、自作RISC-Vエミュレータ、そしてSpikeだ。実行結果は以下のようになった。
Simulator | Dhyrstone Time[s] |
---|---|
QEMU-5.1.0 | 0.789 |
Dydra-6ec3e02 | 5.4504 |
Spike | 28.909 |
注:Dydraが自作のBinary Translation型RISC-Vエミュレータ
とりあえずQEMUが爆速なのは理解できた。かなり大きな差を開けれらているなあ... Rustのパフォーマンス解析ツールを使用しようとしたが、flamegraphはWSLに対応していないので上手く動作しなかった。AWS上に普通のLinuxマシンを用意しなければ。
これだけの差をつけられているのは、おそらく変換後のバイナリ効率もさもありなだがそこが問題ではないと思っている(というか、QEMUとほぼ同じバイナリ生成アルゴリズムを使用しているので変わりようがないはずなのだ、最適化を除く)。性能解析ツールを入れないと何とも言えないが、おそらく変換のためのルーチンそのものと、毎回TCGバッファを探索しているところ当たりの性能が効いてきている気がする。まあちょっとそこも含め性能解析ツールの準備をしなきゃな。