1 ポイント 投稿者 GN⁺ 2024-08-28 | 1件のコメント | WhatsAppで共有

概要

  • 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件のコメント

 
GN⁺ 2024-08-28
Hacker Newsの意見
  • RISC-Vをターゲットにソフトウェアを開発する際、ソフトウェアエンジニアが何を変えるべきかという質問がある

    • 実行ファイルのサイズが増える可能性があるため、キャッシュ局所性のために積極的に最適化する必要がある
    • 特定の種類のソフトウェアはCISCまたはRISCのどちらかにより適している可能性がある。たとえば、ゲームやWebサーバーなど
  • 大きなRISC-V CPUをいくつかと、小さなRISC-V CPUを多数使って実装された「GPU」を搭載するシステムが登場する可能性への疑問

    • 古典的なベクターがpacked SIMDの代わりにGPUで有用かもしれないか、という追加の質問
  • 有名なロシア人がElbrus 8SでAtomic Heartを動かした事例を思い出させる

    • Elbrusにはネイティブトランスレータがあり、Atomic Heartは15〜25 fpsでプレイ可能だった
  • 記事が「基本事項」についてあまりに短いという意見

    • x86_64 ISAをRISC-Vチップ上でどのように実装したのかについて、追加情報が必要
  • x86エミュレーションの文脈では、RISC-Vが最も表現力に乏しいという意見

    • RISCはコンピュータサイエンスの歴史の授業で、簡素化命令セットコンピュータとして説明されていた
    • 多くの記事や新しいRISC-Vプロファイルは、「機能的同等性のためにはいくつか追加の命令が必要だ」と示唆している
    • RISC-Vは他のプラットフォームに対する便利な代替手段だが、RISCの夢は死んだのかという疑問
  • 驚くべき結果だという意見

    • 多くの作業が必要で、場合によってはRISC-Vが限界に達しているようにも見える
    • ビット操作命令やscatter命令は拡張として追加されるべき
  • 86Boxについての質問

    • Amstrad PC1512を使っていた時代を懐かしみ、ハードカードやメモリ拡張を追加していた経験を共有している
    • Borland TurboPascalやZortech Cを使っていた楽しい時代
  • スクリーンショットには31GBのRAMが表示されている

    • 最大構成の開発ボードよりもはるかに多くのRAMを使っているようだ
  • 過去の投稿へのリンクとMilk-V Pioneerに関する情報

    • ネイティブ開発向けの、64コアRISC-Vマザーボードおよびワークステーション製品
  • RVIにISAレベルのフィードバックを届けられることを望む意見