ARM上でのx86-TSOメモリモデル エミュレーションの課題
FEX-Emuが、ARM プロセッサ上でx86 Total Store Ordering (TSO) メモリモデルをエミュレートする際の技術的課題を詳しく解説した記事を公開した。メモリコヒーレンシー、アラインメント要件、アトミック命令、そして異なるCPUアーキテクチャ間での性能への影響を網羅している。
FEX-EmuはARMv8.0-aでx86-TSOをエミュレートするため、acquire/release命令を使用している。一方、Apple Silicon、Ampere、Qualcomm などのプロセッサは、このエミュレーション技術が直面する性能トレードオフに異なる方法で対応している。
メモリモデルの違い
x86-TSOはTotal Store Orderingという厳格なメモリモデルで、メモリストアが発生すると、そのストアはシステム内の全プロセッサに対してコヒーレントに見えることを保証する。これに対し、ARMの弱いメモリモデルは直感的ではなく、デフォルトではARMの通常のメモリロード・ストア命令はシステム内のプロセッサ間で厳密にはコヒーレントではない。
Apple Siliconの対応
Apple Silicon プロセッサはx86-TSOメモリモデルに直接サポートを追加した。CPU機能トグルが有効にされると、通常のロード・ストアARM命令の動作がx86の要件に一致するよう変わる。この実装により、Apple M1ではTSOモード有効時のストア性能は通常のストア性能の76%となり、アラインされたストア間の性能差は5%に留まる。
ARMの拡張機能と性能
FEAT_LRCPC拡張機能はARMv8.3以降で必須となり、新しいロード命令とRelease Consistency Processor Consistent (RCpc) メモリモデルを追加した。FEAT_LSE2拡張はacquire/LRCPC/releaseメモリアクセスのアラインメント要件を16バイト単位に緩和する。
異なるアーキテクチャにおけるアンアラインド命令の性能ペナルティは顕著である。Cortex-X4では不整列ロード・ストアで50%の性能低下が見られ、Oryon-3ではアンアラインドのLRCPC-releaseロードで70%、ストアで43%の低下が生じる。一方、AmpereOneではアンアラインドストアで8.5%の性能低下に留まり、通常のストア命令性能は28 GB/sである。メモリ帯域幅に関しては、Cortex-X4プラットフォームが76.8 GB/sであるのに対し、Cortex-X925を搭載したDGX Sparkは273 GB/sを実現している。
課題と対応
アラインメント不整合が発生すると、FEXはpatchpointsで acquire/release命令から基本的なロード・ストアにデータメモリバリアを挟んだ形にコードをパッチする。x86には18個の原子RMW操作があり、ARMに対応する命令が存在する。単一コピーアトミック性により、ARMの自然にアラインされたロード・ストア命令はデータティアリングを防ぐ。
筆者の見立て
- x86-TSOをこれらの命令で実装することは非常にコストがかかると論じている。
- FEAT_LRCPC拡張はx86エミュレーションの要件に基づいて設計されており、これを実装したハードウェアで大きく活用されると予想している。
- TSO互換性により、メモリ性能が基本的に解決されると解釈している。
- ARM上でのx86エミュレーション高性能化にはTSOモードが最善のアプローチであると意見している。
- 今後、FEAT_LRCPCの追加拡張バージョンが登場すると予想している。
- これはARM上でのx86エミュレーションを真摯に取り組むことの意味を示唆している。
- Apple が顧客のネイティブおよびエミュレート実行環境の両方における良好な体験を重視していることを示していると解釈している。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
FEX-Emu 「The scourge of x86 emulation」https://fex-emu.com/Scourge-of-emulation/