Arm でのエミュレーションのしくみ

エミュレーションを使用すると、Arm で Windows アプリの豊富なエコシステムを利用できるようになり、ユーザーはアプリに変更を加えることなく、関心のあるアプリを実行できます。 エミュレーションはユーザーに対して透過的であり、Windows の一部です。追加のコンポーネントをインストールする必要はありません。

Arm 上の Windows 11 では、x86 アプリと x64 アプリの両方のエミュレーションがサポートされ、Windows 11 24H2 の新しいエミュレーター Prism の導入によりパフォーマンスが強化されました。 Arm 上の Windows 10 ではエミュレーションもサポートされていますが、x86 アプリの場合のみサポートされます。

Prism

Prism は、Windows 11 24H2 に含まれる新しいエミュレーターです。 Windows に含まれる以前のエミュレーション テクノロジに比べて、エミュレーション下のアプリのパフォーマンスと CPU 使用率を向上させる大幅な最適化が含まれています。

Prism は、Qualcomm Snapdragon プロセッサ専用に最適化およびチューニングされています。 Prism 内の一部のパフォーマンス機能では、Snapdragon X シリーズでのみ使用できるハードウェア機能が必要ですが、Prism は、Windows 11 24H2 を搭載した Arm デバイスでサポートされているすべての Windows 11 で使用できます。

エミュレーションのしくみ

エミュレーションはソフトウェア シミュレーターとして機能し、x86 命令のブロックを Arm64 命令にジャストインタイムコンパイルし、出力される Arm64 コードのパフォーマンスを向上させるための最適化を行います。

これらの変換されたコード ブロックをキャッシュして、コードが再度実行されたときに命令変換のオーバーヘッドを削減し最適化できるようにするサービスがあります。 キャッシュはモジュールごとに生成されるため、他のアプリで最初の起動時から使用できます。

x86 アプリの場合、Windows の WOW64 レイヤーでは、x86 コードを Windows の x64 バージョンで実行できるようにするのと同様に、x86 コードを Windows の Arm64 バージョンで実行できます。 つまり、Arm 上の x86 アプリは、ファイルシステムとレジストリのリダイレクトで保護されます。

x64 アプリの場合、WOW64 レイヤーはなく、Windows システム バイナリの個別のレジストリまたはフォルダーもありません。 代わりに、システム バイナリは Arm64X PE ファイルとしてコンパイルされます ファイルシステムのリダイレクトを必要とせずに、同じ場所から x64 と Arm64 の両方のプロセスに読み込むことができます。 つまり、x64 アプリケーションは、特別なコードを必要とせずに、ファイルシステムとレジストリの両方で OS 全体にアクセスできます。

エミュレーションではユーザー モード コードのみがサポートされ、ドライバーはサポートされないことに注意してください。すべてのカーネル モード コンポーネントは、Arm64 としてコンパイルする必要があります。

エミュレーションの検出

x86 または x64 アプリは、Arm PC 上の Windows 上で実行されていることを認識しません。ただし、arm64 ホストの知識を伝達するように設計された特定の API ( IsWoW64Process2 など) を呼び出す場合を除きます。 エミュレーションの下で、メタデータや機能を含むプロセッサの詳細を照会するアプリは、エミュレートされた仮想プロセッサに対応する詳細を受け取ります。 互換性上の理由から、API GetNativeSystemInfo は、エミュレーションの下でアプリから実行すると、エミュレートされたプロセッサの詳細も返します。

オペレーティング システムのエミュレーション機能を検出するアプリの場合は、API GetMachineTypeAttributes を使用します。

Arm バージョンのアプリをサポートするための更新

Arm デバイスでエミュレーションの下でアプリを実行することは、開始するのに最適な場所ですが、Arm サポートをアプリに追加するためにリビルドすると、ネイティブパフォーマンスの向上と Arm 搭載デバイスの固有の特性の恩恵を受けることができます。

Arm のサポート Windows アプリに追加する方法 アプリの Arm バージョンを作成する方法と、関連する可能性がある利点、課題、ツールの種類、および Arm バージョンのアプリ (および関連する依存関係) の作成に関する利用可能なサポートに関するガイダンスを参照してください。