Partager via


Arm64EC - Générer et porter des applications pour des performances natives sur Arm

Arm64EC (« Compatible avec l’émulation ») vous permet de créer de nouvelles applications natives ou de migrer de manière incrémentielle les applications x64 existantes pour tirer parti de la vitesse et des performances natives possibles avec les appareils arm, notamment une meilleure consommation d’alimentation, une durée de vie de batterie et des charges de travail IA et ML accélérées.

Arm64EC est une nouvelle interface binaire d’application (ABI) pour les applications s’exécutant sur des appareils Arm avec Windows 11. Il s’agit d’une fonctionnalité Windows 11 qui nécessite l’utilisation du Kit de développement logiciel (SDK) Windows 11 et qui n’est pas disponible sur Windows 10 sur Arm.

Interopérabilité

Le code construit comme Arm64EC interopère avec le code x64 exécuté sous émulation dans le même processus. Le code Arm64EC du processus s’exécute avec des performances natives, tandis que tout code x64 s’exécute à l’aide d’émulation intégrée avec Windows 11. Même si votre application s’appuie sur des dépendances ou des plug-ins existants qui ne prennent pas encore en charge Arm, vous pouvez commencer à régénérer des parties de votre application en tant qu’Arm64EC pour bénéficier des avantages des performances natives.

Arm64EC garantit l’interopérabilité avec x64 en suivant les conventions logicielles x64, notamment la convention d’appel, l’utilisation de la pile, la disposition de structure de données et les définitions de préprocesseur. Toutefois, le code Arm64EC n’est pas compatible avec le code généré en tant qu’Arm64, qui utilise un ensemble différent de conventions logicielles.

Le système d’exploitation Windows 11 sur Arm s’appuie fortement sur l’interopérabilité d’Arm64EC pour permettre l’exécution d’applications x64. La plupart du code du système d’exploitation chargé par une application x64 s’exécutant sur Windows 11 sur Arm est compilé en tant qu’Arm64EC, ce qui permet des performances natives pour ce code sans connaître l’application.

Un processus x64 ou Arm64EC peut charger et appeler des fichiers binaires x64 et Arm64EC, tandis qu’un processus Arm64 ne peut charger que des fichiers binaires Arm64. Les deux architectures peuvent charger des fichiers binaires Arm64X, car ceux-ci contiennent du code pour x64 et Arm64.

Architecture de processus binaire x64 Binaire Arm64EC Binaire Arm64
x64/Arm64EC Supported Supported Non prise en charge
Arm64 Non prise en charge Non prise en charge Supported

De même, au moment de la génération, les fichiers binaires Arm64EC peuvent se lier à la fois dans les bibliothèques x64 et Arm64EC, tandis que les fichiers binaires Arm64 peuvent uniquement se lier dans les bibliothèques Arm64.

Architecture PE Bibliothèque x64 Bibliothèque Arm64EC Bibliothèque Arm64
Arm64EC Supported Supported Non prise en charge
Arm64 Non prise en charge Non prise en charge Supported

Pour plus d’informations sur la façon dont arm64EC ABI active l’interopérabilité, consultez Comprendre l’ABI Arm64EC et le code d’assembly.

Utiliser Arm64EC pour accélérer une application existante sur Windows 11 sur Arm

Arm64EC vous permet de transférer de façon incrémentielle le code dans votre application existante de l’émulation vers le mode natif. À chaque étape le long du chemin, votre application continue de s’exécuter correctement sans avoir besoin d’être recompilée tout en même temps.

Exemple de graphique montrant des effets de mise à jour incrémentielle sur les performances arm à l’aide d’Arm64EC

L’image précédente montre un exemple simplifié d’une charge de travail x64 entièrement émulée prenant un certain temps qui est ensuite amélioré de manière incrémentielle à l’aide d’Arm64EC :

  1. À partir d’une charge de travail x64 entièrement émulée
  2. Après avoir recompilé les parties les plus gourmandes en UC en tant que Arm64EC
  3. Après avoir continué à recompiler plus de modules x64 au fil du temps
  4. Résultat final d’une application Arm64EC entièrement native

En recompilant les modules qui prennent le plus de temps ou qui sont les plus gourmands en uc de x64 à Arm64EC, vous bénéficiez de l’amélioration la plus élevée pour le moins d’efforts à chaque étape.

Dépendances d’application

Lorsque vous utilisez Arm64EC pour reconstruire une application, utilisez les versions arm64EC des dépendances, mais vous pouvez également vous appuyer sur les versions x64 des dépendances. Vous ne pouvez pas utiliser les versions Arm64 des dépendances.

Tout code x64, y compris le code des dépendances, dans un processus Arm64EC s’exécute sous émulation dans votre application. Privilégiez les dépendances les plus gourmandes en processeur afin de passer de x64 à Arm64EC et ainsi améliorer les performances de votre application.

Identification des fichiers binaires et des applications Arm64EC

Les applications s’exécutant sur Windows 11 sur Arm interagissent avec les fichiers binaires Arm64EC comme s’ils sont des fichiers binaires x64. L’application n’a pas besoin de savoir dans quelle mesure le code dans le fichier binaire est recompilé en tant qu’Arm64EC. 

Pour identifier ces fichiers binaires, vous pouvez les voir dans une invite de commandes développeur à l’aide de link /dump /headers.

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

La combinaison de (x64) et (ARM64X) indique que certaines parties du binaire sont recompilées comme Arm64EC, même si le binaire semble toujours être x64. Un fichier binaire avec un en-tête d’ordinateur qui contient (ARM64) et (ARM64X) est un fichier PE Arm64X qui peut être chargé dans les applications x64 et Arm64.

Vous pouvez également utiliser le Gestionnaire des tâches Windows pour identifier si une application est compilée en tant qu’Arm64EC. Dans l’onglet Détails du gestionnaire de tâches, la colonne Architecture affiche ARM64 (compatible x64) pour les applications dont l’exécutable principal est partiellement ou complètement compilé en tant qu’Arm64EC.

Capture d’écran du Gestionnaire de tâches montrant ARM64 (compatible x64) dans les détails de l’architecture.

Étapes suivantes

Consultez Prise en main d’Arm64EC pour découvrir comment créer ou mettre à jour des applications Win32 à l’aide d’Arm64EC.