FPGA開発日記

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

RISC-V 5th Workshopの発表紹介 (Fast Instruction Set Simulator)

f:id:msyksphinz:20160605215109p:plain

この記事は ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016 - Qiita の7日目の記事です。

Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 僕一人では、クオリティのある記事を続けられそうにありません。。。(弱音)

A FastInstruction Set Simulator for RISC-V (Esperanto)

https://riscv.org/wp-content/uploads/2016/11/Wed1330-Fast-ISA-Simulator-for-RISC-V-Maslov-Esperanto.pdf

Esperantoというスタートアップ企業で開発されている高速RISC-V命令セットシミュレータの紹介。

RISC-Vの命令セットシミュレータといえば、riscv-spikeが存在する。これは UC-Berkeleyで開発された本家のISSだ。また、RISC-V向けのQEMUも存在する。

github.com

github.com

これらのシミュレータは、例えばSPECINTを実行させた場合に、シミュレーションだけだと非常に遅いという欠点がある。例えば、実CPUでx64で動作させると一瞬なのだが、ISSで動作させると非常に時間がかかったり、そもそもQEMUで実行するとFailになったりする。

これを解決するために、EsperantoのFast Instruction Set Simulatorでは以下の部分に着目した。

シミュレーション時の、RISC-V命令の変換フローは以下のようになっている。

f:id:msyksphinz:20161205010335p:plain

上記は https://riscv.org/wp-content/uploads/2016/11/Wed1330-Fast-ISA-Simulator-for-RISC-V-Maslov-Esperanto.pdf より抜粋。

これを見ると、もちろん命令の変換というのも実行されるのだが、一度変換した命令は、キャッシュに保存しておくことで冗長に変換処理を繰替えすことを防いでいる。

結果として、EsperantoISSは、Nativeのx86でのベンチマーク実行と比較して、1/2.47倍の速度で実行できるようになった。 これは結構凄い結果だと思う。単純なISSでは決してここまで速くなることはないと思うのだが、Native命令に変換し、キャッシュを挿入することでNativeハードウェアと遜色無い性能にまで引き上げている。

ただし、手法自体はそこまで新しいものでは無いと思う。ターゲットの命令を、ホストPCの命令に変換し、これをキャッシュに格納して高速化することは、エミュレーションの本の最初の方にも説明があった気がする。 確か、以下の本だ。

  • Virtual Machines: Versatile Platforms for Systems and Processes