概要
- 1年前、RV64 DynaRecは Stardew Valley や World of Goo のような、比較的「動かしやすい」ネイティブ Linux ゲームしか実行できなかった
- 多くの新しい x86_64 命令がRISC-Vに素早く実装された一方で、DynaRecには多くのバグが残っていた
- 当時は AMD グラフィックカードを接続できる RISC-V デバイスがなく、VisionFive 2 と LicheePi 4A の IMG 統合グラフィックスは OpenGL をサポートしていなかった
- gl4es を使って Stardew Valley のようなゲームを動かすことはできたが、より複雑な Linux ゲームや Windows ゲームには十分ではなかった
- Sophgo の Milk-V Pioneer によって AMD グラフィックカードを接続できるようになり、多くの RV64 DynaRec のバグ修正と新しい x86 命令の追加により The Witcher 3 を実行できるようになった
RISC-V DynaRecの現状
- x86 命令セットは非常に膨大
- ARM64 バックエンドは 1,600 個以上の x86 命令を実装しているが、RV64 バックエンドは約 1,000 個を実装している
- SSE 命令はスカラ命令として実装されており、AArch64 は Neon 拡張、LoongArch64 は LSX 拡張を使用するため、性能が低下する
- RISC-V にはベクトル拡張の RVV があり、Milk-V Pioneer と SpacemiT K1/M1 SoC がこれをサポートしている
- 最近 box64 に基本的な RVV サポートを追加し、いくつかの一般的な SSE 命令を実装したが、まだ初期段階にある
x86エミュレーションで最も必要な命令
- x86 エミュレーションにおいて、RISC-V は AArch64 や LoongArch64 と比べて表現力が不足している
- RISC-V には、レジスタのビット範囲を選択したり、別のレジスタのビット範囲へ挿入したりする命令がない
- 例えば、
ADD AH, BL 命令を RISC-V で実装するには 10 個の命令が必要になる
16バイト原子命令の壁
- x86 には LOCK プレフィックス付きの原子的演算命令があり、box64 は LR/SC シーケンスを使ってこれをエミュレートしている
LOCK CMPXCHG16B 命令は 16 バイトのメモリを比較して交換するが、RISC-V にはこれに相当する命令がない
- そのためこの命令を完全に実装することはできず、Unity ゲームのような多くのプログラムがこの命令を使用している
結論
- いくつかの欠点はあるものの、The Witcher 3 は box64 上で最大 15fps で動作し、メインメニューではフルスピードで動作する
GN⁺のまとめ
- RISC-V で The Witcher 3 を動かしたことは、技術的進歩を示す重要な出来事
- RISC-V の x86 エミュレーションは依然として他のアーキテクチャと比べて不足しているが、RVV のような拡張によって改善される可能性がある
- RISC-V の表現力不足と 16 バイト原子命令の不在は、主要な問題点として残っている
- 類似機能を持つプロジェクトとしては、QEMU のようなエミュレータがある
1件のコメント
Hacker Newsの意見
RISC-Vをターゲットにソフトウェアを開発する際、ソフトウェアエンジニアが何を変えるべきかという質問がある
大きなRISC-V CPUをいくつかと、小さなRISC-V CPUを多数使って実装された「GPU」を搭載するシステムが登場する可能性への疑問
有名なロシア人がElbrus 8SでAtomic Heartを動かした事例を思い出させる
記事が「基本事項」についてあまりに短いという意見
x86エミュレーションの文脈では、RISC-Vが最も表現力に乏しいという意見
驚くべき結果だという意見
86Boxについての質問
スクリーンショットには31GBのRAMが表示されている
過去の投稿へのリンクとMilk-V Pioneerに関する情報
RVIにISAレベルのフィードバックを届けられることを望む意見