Arm64EC : Erstellen und Porten von Apps für native Leistung auf Arm

Mit Arm64EC ("Emulationskompatibel") können Sie neue native Apps erstellen oder vorhandene x64-Apps inkrementell umstellen, um die native Geschwindigkeit und Leistung zu nutzen, die mit Arm-Geräten möglich ist, einschließlich besserer Energieverbrauch, Akkulaufzeit und beschleunigter AI ML-Workloads & .

Arm64EC ist eine neue Binärschnittstelle (Application Binary Interface, ABI) für Apps, die auf Arm-Geräten mit Windows 11 ausgeführt werden. Es handelt sich um ein Windows 11 Feature, das die Verwendung des Windows 11 SDK erfordert und nicht auf Windows 10 auf Arm verfügbar ist.

Interoperabilität

Code, der als Arm64EC erstellt wurde, ist interoperabel mit x64-Code, der unter Emulation innerhalb desselben Prozesses ausgeführt wird. Der Arm64EC-Code im Prozess wird mit nativer Leistung ausgeführt, während jeder x64-Code mithilfe einer Emulation ausgeführt wird, die mit Windows 11 integriert ist. Auch wenn Ihre App auf vorhandenen Abhängigkeiten oder Plug-Ins angewiesen ist, die Arm noch nicht unterstützen, können Sie Teile Ihrer App als Arm64EC neu erstellen, um die Vorteile der nativen Leistung zu nutzen.

Arm64EC garantiert die Interoperabilität mit x64 durch Die Einhaltung von x64-Softwarekonventionen, einschließlich Aufrufkonventionen, Stapelnutzung, Datenstrukturlayout und Präprozessordefinitionen. Arm64EC-Code ist jedoch nicht kompatibel mit Code, der als Arm64 erstellt wurde, der eine andere Reihe von Softwarekonventionen verwendet.

Das Windows 11 unter Arm-Betriebssystem selbst basiert stark auf der Interoperabilität von Arm64EC, um die Ausführung von x64-Anwendungen zu ermöglichen. Der meiste Betriebssystemcode, der von einer x64-App geladen wird, die auf Windows 11 auf Arm ausgeführt wird, wurde als Arm64EC kompiliert, wodurch die native Leistung für diesen Code ermöglicht wird, ohne dass die Anwendung es weiß.

Ein x64- oder Arm64EC-Prozess kann sowohl x64- als auch Arm64EC-Binärdateien laden und aufrufen, während ein Arm64-Prozess nur Arm64-Binärdateien laden kann. Beide Architekturen können Arm64X-Binärdateien laden, da diese Code für x64 und Arm64 enthalten.

Prozessarchitektur x64 Binär Arm64EC-Binärdatei Arm64-Binärdatei
x64/Arm64EC
Arm64

✔ = Unterstützt, ❌ = Nicht unterstützt

Ebenso können arm64EC-Binärdateien zur Buildzeit sowohl in x64- als auch in Arm64EC-Libs verknüpft werden, während Arm64-Binärdateien nur in Arm64-Libs verknüpfen können.

PE-Architektur x64 lib Arm64EC lib Arm64 lib
Arm64EC
Arm64

✔ = Unterstützt, ❌ = Nicht unterstützt

Weitere Informationen dazu, wie arm64EC ABI Interoperabilität ermöglicht, finden Sie unter Grundlegendes zu Arm64EC-ABI und Assemblycode.

Verwenden sie Arm64EC, um eine vorhandene App auf Windows 11 auf Arm zu beschleunigen

Mit Arm64EC können Sie den Code in Ihrer vorhandenen App inkrementell von emuliert auf nativ umstellen. Bei jedem Schritt auf dem Weg wird Ihre Anwendung weiterhin gut ausgeführt, ohne dass sie gleichzeitig neu kompiliert werden muss.

Beispieldiagramm mit inkrementellen Updateeffekten auf die Arm-Leistung mithilfe von Arm64EC

Die obige Abbildung zeigt ein vereinfachtes Beispiel für eine vollständig emulierte x64-Workload, die einige Zeit in Anspruch nimmt und dann mithilfe von Arm64EC inkrementell verbessert wird:

  1. Starten als vollständig emulierte x64-Workload
  2. Nach der Neukompilierung der CPU-intensiven Teile als Arm64EC
  3. Nachdem sie im Laufe der Zeit weitere x64-Module neu kompiliert haben
  4. Endergebnis einer vollständig nativen Arm64EC-App

Durch die Neukompilierung der Module, die die meiste Zeit in Anspruch nehmen oder die cpuintensivste von x64 auf Arm64EC sind, erhält die resultierende Workload die größte Verbesserung für den geringsten Aufwand in jedem Schritt des Weges.

App-Abhängigkeiten

Wenn Sie Arm64EC zum Neuerstellen einer Anwendung verwenden, sollten Sie Arm64EC-Versionen von Abhängigkeiten verwenden, aber Sie können sich auch auf x64-Versionen von Abhängigkeiten verlassen. Arm64-Versionen von Abhängigkeiten können nicht verwendet werden.

Jeder x64-Code, einschließlich Code aus Abhängigkeiten, in einem Arm64EC-Prozess wird unter Emulation in Ihrer App ausgeführt. Die Priorisierung der CPU-intensiven Abhängigkeiten für den Übergang von x64 zu Arm64EC hat den größten Einfluss auf die Verbesserung der Leistung Ihrer App.

Identifizieren von Arm64EC-Binärdateien und -Apps

Apps, die auf Windows 11 auf Arm ausgeführt werden, interagieren mit Arm64EC-Binärdateien, als seien sie x64-Binärdateien. Die App muss nicht wissen, in welchem Umfang der Code in der Binärdatei als Arm64EC neu kompiliert wurde. 

Für Entwickler, die daran interessiert sind, diese Binärdateien zu identifizieren, können Sie sie in einer Entwickler-Eingabeaufforderung mit link /dump /headerssehen.

File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
    8664 machine (x64) (ARM64X)

Die Kombination von (x64) und (ARM64X) gibt an, dass ein Teil der Binärdatei als Arm64EC neu kompiliert wurde, obwohl die Binärdatei immer noch x64 zu sein scheint. Eine Binärdatei mit einem Computerheader, der (ARM64) und (ARM64X) enthält, ist eine Arm64X PE-Datei , die in x64- und Arm64-Apps geladen werden kann.

Der Windows-Task-Manager kann auch verwendet werden, um zu ermitteln, ob eine App als Arm64EC kompiliert wurde. Auf der Registerkarte Details des Task-Managers zeigt die Spalte ArchitekturARM64 (x64-kompatibel) für Anwendungen an, deren Standard ausführbare Datei teilweise oder vollständig als Arm64EC kompiliert wurde.

Screenshot: Task-Manager mit ARM64 (x64-kompatibel) in Architekturdetails

Nächste Schritte

Informationen zum Erstellen oder Aktualisieren von Win32-Apps mit Arm64EC finden Sie unter Erste Schritte mit Arm64EC .