Compartir a través de


Arm64EC: compilación y portabilidad de aplicaciones para el rendimiento nativo en Arm

Arm64EC ("Compatible con la emulación") le permite construir nuevas aplicaciones nativas o realizar una transición incremental de las aplicaciones x64 existentes para aprovechar la velocidad y el rendimiento nativos posibles con dispositivos propulsados por Arm, incluyendo un mejor consumo energético, prolongación de la duración de la batería y cargas de trabajo aceleradas de inteligencia artificial y aprendizaje automático.

Arm64EC es una nueva interfaz binaria de aplicaciones (ABI) para aplicaciones que se ejecutan en dispositivos Arm con Windows 11. Es una característica de Windows 11 que requiere el uso del SDK de Windows 11 y no está disponible en Windows 10 en Arm.

Interoperabilidad

El código creado como Arm64EC interopera con código x64 que se ejecuta bajo emulación dentro del mismo proceso. El código Arm64EC del proceso se ejecuta con rendimiento nativo, mientras que cualquier código x64 se ejecuta mediante la emulación que viene integrada con Windows 11. Incluso si la aplicación se basa en dependencias o extensiones existentes que aún no son compatibles con Arm, puedes empezar a recompilar partes de la aplicación como Arm64EC para obtener las ventajas del rendimiento nativo.

Arm64EC garantiza la interoperabilidad con x64 al seguir las convenciones del software x64, incluidas las convenciones de llamada, el uso de la pila, el diseño de las estructuras de datos y las definiciones del preprocesador. Sin embargo, el código Arm64EC no es compatible con el código creado como Arm64, que usa un conjunto diferente de convenciones de software.

El propio sistema operativo Windows 11 en Arm se basa en gran medida en la interoperabilidad de Arm64EC para habilitar la ejecución de aplicaciones x64. La mayoría del código del sistema operativo cargado por una aplicación x64 que se ejecuta en Windows 11 en Arm se compila como Arm64EC, lo que permite el rendimiento nativo para ese código sin que la aplicación sepa.

Un proceso x64 o Arm64EC puede cargar y llamar a archivos binarios x64 y Arm64EC, mientras que un proceso Arm64 solo puede cargar archivos binarios de Arm64. Ambas arquitecturas pueden cargar archivos binarios Arm64X, ya que contienen código para x64 y Arm64.

Arquitectura de procesos Binario x64 Binario Arm64EC Binario Arm64
x64/Arm64EC Supported Supported No está soportado
Arm64 No está soportado No está soportado Supported

De forma similar, en tiempo de compilación, los archivos binarios de Arm64EC pueden vincularse tanto en bibliotecas x64 como en bibliotecas Arm64EC, mientras que los archivos binarios de Arm64 solo pueden vincularse en bibliotecas de Arm64.

Arquitectura de PE Biblioteca de x64 Biblioteca de Arm64EC Biblioteca de Arm64
Arm64EC Supported Supported No está soportado
Arm64 No está soportado No está soportado Supported

Para obtener más información sobre cómo la ABI de Arm64EC habilita la interoperabilidad, consulta Descripción de la ABI de Arm64EC y el código de ensamblado.

Usar Arm64EC para que una aplicación existente sea más rápida en Windows 11 en Arm

Arm64EC permite realizar la transición incremental del código de la aplicación existente de emulado a nativo. En cada paso del camino, la aplicación continúa ejecutándose correctamente sin necesidad de volver a compilarla toda.

Gráfico de ejemplo que muestra los efectos de actualización incremental en el rendimiento de Arm mediante Arm64EC

En la imagen anterior se muestra un ejemplo simplificado de una carga de trabajo x64 totalmente emulada que tarda cierto tiempo y, a continuación, se mejora incrementalmente mediante Arm64EC:

  1. Empezando con una carga de trabajo x64 totalmente emulada
  2. Después de volver a compilar las partes más intensivas en uso de CPU como Arm64EC
  3. Después de volver a compilar más módulos x64 a lo largo del tiempo
  4. Resultado final de una aplicación Arm64EC totalmente nativa

Al volver a compilar los módulos que tardan más tiempo o que consumen más cpu de x64 a Arm64EC, obtendrá la mayor mejora para la menor cantidad de esfuerzo en cada paso.

Dependencias de aplicaciones

Cuando use Arm64EC para recompilar una aplicación, utilice versiones Arm64EC de las dependencias, pero también puede confiar en versiones x64. No puede usar versiones Arm64 de las dependencias.

Cualquier código x64, incluido el código de las dependencias, en un proceso arm64EC se ejecuta bajo emulación en la aplicación. Dé prioridad a las dependencias que consumen más CPU para realizar la transición de x64 a Arm64EC para mejorar el rendimiento de la aplicación.

Identificación de archivos binarios y aplicaciones Arm64EC

Las aplicaciones que se ejecutan en Windows 11 en Arm interactúan con los archivos binarios de Arm64EC como si fueran archivos binarios x64. La aplicación no necesita saber en qué medida el código del binario se vuelve a compilar como Arm64EC. 

Para identificar estos archivos binarios, puede verlos en una consola de comandos para desarrolladores mediante link /dump /headers.

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

La combinación de (x64) y (ARM64X) indica que parte del binario se vuelve a compilar como Arm64EC, aunque el binario sigue siendo x64. Un binario con un encabezado de máquina que contiene (ARM64) y (ARM64X) es un archivo PE Arm64X que se puede cargar en aplicaciones x64 y Arm64.

También puedes usar el Administrador de tareas de Windows para identificar si una aplicación se compila como Arm64EC. En la pestaña Detalles del administrador de tareas, la columna Arquitectura muestra ARM64 (x64 compatible) para las aplicaciones cuyo ejecutable principal se compila parcialmente o completamente como Arm64EC.

Captura de pantalla del Administrador de tareas que muestra ARM64 (compatible con x64) en Detalles de la arquitectura.

Pasos siguientes

Consulta Primeros pasos con Arm64EC para obtener información sobre cómo compilar o actualizar aplicaciones Win32 con Arm64EC.