x86エミュレーションを蝕む「メモリモデル」の呪い
The Scourge of x86 Emulation
FEXがx86のTSOメモリモデルをARMの弱いメモリモデル上でエミュレートする際の根本的な問題を解説。ARMv8.0-aでは全ロードをload-acquire、全ストアをstore-releaseに変換する必要があり、特にAmpereOneで性能が激減。ARMv8.3のLRCPC拡張でほぼ解決するが、Apple Siliconはx86-TSOモードをハードウェアで直接サポートし、通常のロード/ストアでエミュレーションを実現している。
x86エミュレーションで全てのロードにacquire-releaseセマンティクスを使うと、ARM CPUに非常に厳しい制限が課され、ロード命令同士の順序付けが一切できなくなる。
HNでの議論
67- pdw
この記事の導入部では、よくある主張が繰り返されている。
> ARMは最も緩いモデルで、大幅なハードウェア最適化を可能にする。一方x86は最も厳格で、最適化の余地をあまり与えない非常に強いコヒーレンシモデルを強制する
しかし、緩いモデルが必ずしも大きな利点をもたらすわけではないという説得力のある議論をいくつか見たことがある。https://fgiesen.wordpress.com/2026/08/25/memory-ordering-in-...
- dagmx
参考までに、FexはAppleのRosetta2やMicrosoftのPrismによく似た、x86からARMへの翻訳フレームワークだ。
Valveがスポンサーとして開発を支援しており、新しいSteam Frameがx86ゲームをサポートする方法でもある。また、Crossover Betaでは(フォークとして)Rosetta2の使用を置き換えるために使われている。
- sureglymop
少し話はそれるが、このプロジェクト(FEX)は素晴らしい。複数のARMハンドヘルドでArmada OSを動かしているが、今では素晴らしいバッテリー寿命を除けば、実用的な小さなLinuxマシンになっている。
遭遇する問題のほとんどはアンチチート関連(EACなど)だが、今のところそれらは回避できる。x86エミュレーションがここまで進歩したのは、どこか信じられない気がする。
- modeless
記事でも指摘されているように、Appleはx86エミュレーションが重要になった6年前、チップにx86互換のメモリオーダリングモードを単に追加することでこの問題を解決した。Appleのチップが業界をリードしているまた別の例だ。
- asksomeoneelse
素晴らしい記事!これはまさにHNのトップページでいつも見つけたいと思っている種類のコンテンツだ。
Appleでは、垂直統合がこれほどうまく機能するために、社内で物事がどう組織されているのか本当に不思議に思う。あの機能だけでも、実に多くのチームから実に多くの人々が関わっていたに違いない。