HeadlinesBriefing favicon HeadlinesBriefing.com

ARMにおけるx86エミュレーションの悪夢

Hacker News •
×

当サイトの最初の機能記事へようこそ。私たちがエミュレートするすべてのアプリケーションに影響を与えるx86エミュレーションの進行中の問題をカバーします。これは単一の広範な影響を持つ用語に還元されます。つまり、x86総保存順序メモリモデル(x86-TSO)のエミュレーションです。ARMが定義する弱い順序付けメモリモデル上でこのメモリモデルをエミュレートする問題は多面的であり、複数の問題を含みます。本記事で私たちが遭遇できるすべての問題と、私たちが解決する方法(または一部の場合は解決できない方法)を説明します。

正確にx86-TSOとは何か?メモリモデルは、システム内のメモリアクセスが相互にどのように振る舞うかを定めるルールのセットです。これらのルールは、単一スレッド環境またはマルチスレッド環境でのロードとストアの相互作用を規定します。今日私たちが関心を持つ2つのモデルは、ARMの緩やか(または弱い)一貞性モデルと、x86変種の総保存順序一貞性モデルです。これらの2つのモデルは基本的にスペクトルの2つの極端に位置しています。ARMはハードウェア最適化を大量に許可する最も緩やかなモデルであり、x86は非常に強い一貞性モデルを強制する最も厳格なモデルです。

TSOが非常に厳格であるため、プログラマはメモリストアが発生すると、それはすべての他のプロセッサに一貫して可視であると仮定できます。ARMが持つ弱いメモリモデルはそう直感的ではありません。デフォルトで、通常のメモリロードとストアはプロセッサ間で厳密に一貫性がなく、CPUのより効率的な動作を可能にします。ARMは一貞性を解決するためにload-acquireとstore-releaseメモリ指令を導入し、C++ std::atomicのmemory_order_acquireとmemory_order_releaseにマッピングされています。