Compartir a través de


Incorporación de compatibilidad con Arm a las aplicaciones de Windows

Los dispositivos basados en Arm se están volviendo cada vez más populares debido a su naturaleza de poco consumo de energía, una duración más larga de la batería y una impresionante potencia de procesamiento, además de la compatibilidad de Windows en Arm con unidades de procesamiento neuronal (NPU) optimizadas para las cargas de trabajo de inteligencia artificial y aprendizaje automático cada vez más populares.

En esta guía, se describen los pasos para agregar compatibilidad a las aplicaciones de Windows para dispositivos con tecnología de procesadores ARM64. Las instrucciones también tratarán formas de solucionar posibles problemas o bloqueadores (como dependencias o complementos de terceros) que pueden interferir con la creación de una versión de la aplicación basada en ARM64.

Emulación en dispositivos basados en Arm para aplicaciones de Windows x86 o x64

Las versiones Arm de Windows 10 incluyen tecnología de emulación que permite ejecutar aplicaciones x86 sin modificar en dispositivos Arm. Windows 11 amplía esa emulación para ejecutar aplicaciones Windows x64 sin modificar en dispositivos con tecnología Arm.

Aunque la capacidad de emular x64 y x86 en dispositivos Arm es un gran paso hacia adelante, esta guía le ayudará a agregar soporte nativo de Arm, a fin de que pueda aprovechar las mejoras de rendimiento nativo y las cualidades únicas de los dispositivos ARM64, incluidas las siguientes:

  • Optimización del consumo de energía de la aplicación para ampliar la duración de la batería del dispositivo.
  • Optimización del rendimiento de CPU, GPU y NPU para acelerar los flujos de trabajo, especialmente cuando se trabaja con IA.

Además, se requiere que los controladores de kernel se compilen como nativos para ARM64. No hay ninguna emulación presente en el kernel. Esto afecta principalmente a los escenarios de virtualización. Para las aplicaciones que usan controladores de dispositivo que requieren acceso directo a los elementos internos del sistema operativo o hardware que se ejecutan en modo kernel, en lugar del modo de usuario, y que aún no se han actualizado para admitir procesadores, consulte Compilar controladores de ARM64 con el WDK.

Nota:

Las aplicación web progresiva (PWA) ya se ejecutarán con el rendimiento nativo de ARM64.

Requisitos previos

Si va a actualizar la aplicación mediante un dispositivo basado en ARM (compilación nativa, generación del código para la misma plataforma en la que se ejecuta), puede usar:

  • Presentación de Visual Studio 17.10 - Versión preliminar 1 (febrero de 2024)

  • Visual Studio 2022 v17.4 o posterior. Esta será la primera versión de disponibilidad general de Visual Studio que admitirá de forma nativa la compilación y depuración de aplicaciones ARM64 en procesadores basados en ARM. Tanto las versiones nativas de ARM64 de Visual Studio 2022 17.4 como las de Microsoft Visual C++ (MSVC) proporcionan un rendimiento considerablemente mejor en comparación con las versiones emuladas anteriores.

  • (Opcional) LLVM (Clang) v12+ o posterior. LLVM 12 agrega una versión binaria oficial hospedada en Windows en ARM64, incluido un compilador de Clang, vinculador LLD y bibliotecas de runtime del compilador-rt.

Si va a actualizar la aplicación de Windows para admitir ARM mediante un dispositivo basado en Intel x64 o x86 (compilación cruzada), puede usar:

Hay varios factores que se deben tener en cuenta al elegir entre la compilación cruzada o la compilación nativa, como el hardware disponible y la simplicidad de la ejecución de pruebas.

Nota:

Se tiene como objetivo la compatibilidad con GCC, la Colección de compiladores GNU para un futuro cercano.

Pasos para agregar compatibilidad nativa de ARM64

Para actualizar la aplicación para que se ejecute de forma nativa en ARM64:

  1. Agregue una configuración de ARM64 al proyecto en Visual Studio.
  2. Pruebe y depure la aplicación ARM64 recién compilada.
  3. Compile y pruebe la aplicación en dispositivos ARM.

Una vez que haya confirmado que la aplicación se ha optimizado correctamente para dispositivos ARM:

  1. Actualice el instalador y publique la aplicación actualizada.
  2. Planifique las actualizaciones regulares

Paso 1: Agregue una configuración de ARM64 al proyecto en Visual Studio

Para agregar una nueva plataforma de soluciones ARM64 con destinos de depuración y versión al proyecto de aplicación x64 o x86 existente:

  1. Abra la solución (código de proyecto) en Visual Studio (consulte los requisitos previos para las versiones compatibles).
  2. En el menú desplegable "Plataformas de soluciones" de la barra de herramientas Estándar (o en el menú "Compilar"), seleccione Administrador de configuración...
  3. Abra el menú desplegable "Plataforma de solución activa" y seleccione <Nueva...>.
  4. En el menú desplegable "Escriba o seleccione la nueva plataforma", seleccione ARM64 y asegúrese de que el valor de "Copiar configuración de" esté establecida en x64 con la casilla "Crear nuevas plataformas de proyectos" habilitada y, luego, seleccione Aceptar.

¡Enhorabuena! Ha empezado a agregar compatibilidad con ARM a la aplicación. A continuación, compruebe si la solución de ARM64 se compila correctamente.

Si la solución no se compila correctamente, deberá resolver los problemas provocan un error en la compilación. La razón más probable es que una dependencia no esté disponible para ARM64, lo que se aborda en la Solución de problemas a continuación.

(Opcional): si desea comprobar de primera mano que el binario de la aplicación está compilado para ARM64, puede abrir el directorio del proyecto en PowerShell (haga clic con el botón derecho en el proyecto de la aplicación en el Explorador de soluciones de Visual Studio y seleccione Abrir en terminal). Cambie los directorios para que se seleccione el nuevo bin\ARM64\Debug o directorio de versión del proyecto. Escriba el comando: dumpbin /headers .\<appname>.exe (reemplazando <appname> por el nombre de la aplicación). Desplácese hacia arriba en los resultados de salida del terminal para buscar la sección de FILE HEADER VALUES y confirmar que la primera línea es AA64 machine (ARM64).

Paso 2: Pruebe y depure la aplicación ARM64 recién compilada

Para comprobar si la solución de ARM64 se compila correctamente después de agregar la plataforma de soluciones de ARM64 al proyecto en Visual Studio:

  1. Cierre la ventana "Plataforma de soluciones activas".
  2. CAmbie la configuración de compilación de Depuración a Versión.
  3. En el menú desplegable "Compilar", seleccione Volver a compilar solución y espere a que se vuelva a compilar el proyecto.
  4. Verá un mensaje de salida de "Operación Recompilar todo finalizada correctamente". Si no es así, consulte la sección de Solución de problemas a continuación.

Una vez compilados los archivos binarios para que la aplicación admita Arm64, querrá probarlos. Para ello será necesario tener un dispositivo o una máquina virtual que ejecute Windows en Arm.

Si va a desarrollar en un dispositivo Windows en Arm, dispone de una configuración sencilla con la depuración local de Visual Studio. Si está ejecutando una compilación cruzada (mediante un dispositivo que no se ejecuta en un procesador Arm), querrá usar la depuración remota en un dispositivo o una máquina virtual Windows en Arm para habilitar la experiencia de desarrollo en Visual Studio mientras ejecuta la aplicación Arm64 en otro dispositivo.

Windows en hardware o máquinas virtuales de ARM disponibles para pruebas

Si buscas hardware que se use para la integración continua (CI) y las pruebas, estos son algunos de los dispositivos Windows con un procesador basado en ARM64:

Para obtener ayuda para configurar una máquina virtual (VM) que ejecuta Windows en Arm para admitir CI y pruebas, consulte Inicio rápido: Creación de una máquina virtual Windows en Arm en Azure Portal.

Paso 3: Compile y pruebe la aplicación en dispositivos ARM

Agregar un pase de automatización de pruebas es una consideración importante teniendo en cuenta la estrategia de integración continua y entrega continua (CI/CD). En el caso de las soluciones para ARM64 que se ejecutan en Windows, es importante ejecutar el conjunto de pruebas en la arquitectura con ARM64; esto podría ser Windows real en hardware ARM, mediante uno de los dispositivos ARM enumerados anteriormente o una máquina virtual, de las máquinas virtuales enumeradas anteriormente.

La compilación de la aplicación es más práctica cuando se realiza en la misma máquina que las pruebas, pero en muchos casos no es necesario que sea así. En su lugar, puede considerar la posibilidad de extender la infraestructura de compilación existente para generar una salida compilada cruzada para ARM64.

Paso 4: Actualice el instalador y publique la aplicación actualizada

Si publica en Microsoft Store, una vez que hayas creado una versión ARM64 de la aplicación siguiendo los pasos anteriores, puede actualizar el paquete de aplicación existente en Microsoft Store visitando el panel del Centro de partners y agregando los archivos binarios ARM64 recién creados al envío.

Si la aplicación aún no está publicada en Microsoft Store, puedes seguir las instrucciones para crear un envío de aplicación en función de si quiere enviar un archivo MSI o EXE, un paquete MSIX, PWA o un complemento de aplicación.

Si compila su propio instalador, debe asegurarse de que puede instalar correctamente la nueva versión de ARM64. La mayoría de los marcos de instalación, como WiX, Squirrel, InnoSetup, InstallAware y otros, son compatibles con Windows en ARM sin problemas.

Si ofrece el instalador de la aplicación desde una página web, puede usar sugerencias de cliente del agente del usuario para detectar si el cliente visita desde un dispositivo Windows en ARM y ofrecerle la versión nativa de Arm actualizada de la aplicación. A diferencia de la cadena de agente del usuario, las sugerencias de cliente del agente del usuario permite diferenciar a los clientes en ARM de los clientes en dispositivos x86.

Paso 5: Planee las actualizaciones regulares

Ahora que tienes una versión ARM64 de la aplicación publicada, debes asegurarte de que permanezca actualizada de la misma manera que otras versiones de la aplicación. Es mejor mantener las versiones y las características alineadas entre arquitecturas para evitar confusiones en los clientes en el futuro.

Solucionar problemas

Entre los problemas comunes que pueden interferir o impedir que agregue una versión ARM64 de la aplicación de Windows x64 o x86 existente, se incluyen:

Una dependencia no compilada para ARM64 le impide realizar una compilación correcta

Si no se puede compilar debido a una dependencia, ya sea interna, de un tercero o de una biblioteca de código abierto, deberá encontrar una manera de actualizar esa dependencia para admitir la arquitectura ARM64 o quitarla.

  • En el caso de las dependencias internas, se recomienda volver a generar la dependencia para la compatibilidad con ARM64.

  • En el caso de las dependencias de terceros, se recomienda presentar una solicitud para que desarrollador recompile con compatibilidad con ARM64.

  • Para las dependencias de código abierto, considere revisar vcpkg para comprobar si existe una nueva versión de la dependencia que incluya compatibilidad con ARM64 a la que pueda actualizar. Si no existe ninguna actualización, considere la posibilidad de contribuir a la adición de compatibilidad con ARM64 al paquete usted mismo. Muchos desarrolladores de código abierto estarán agradecidos por la contribución.

  • La organización Linaro también trabaja con empresas y comunidades de código abierto para desarrollar software en tecnología basada en ARM. Puede enviar una solicitud a la Consola de servicio de Linaro para pedir ayuda con la actualización de la compatibilidad del paquete para cualquier dependencia que falte relacionada con Windows en ARM.

  • Considere usar Arm64EC. Las versiones ARM64EC de dependencias se pueden usar para volver a compilar una aplicación mientras se siguen usando versiones x64 de dependencias. Cualquier código x64, incluido el de las dependencias, en un proceso ARM64EC, se ejecutará bajo emulación en la aplicación. (Las versiones ARM64 de las dependencias no se podrán usar en este caso).

  • La última opción sería quitar o reemplazar la dependencia en el proyecto de la aplicación.

El código está escrito para una arquitectura específica distinta de ARM64

  • Las llamadas a funciones intrínsecas o ensamblados específicos de CPU deben modificarse para que coincidan con las instrucciones y funciones disponibles en la CPU de ARM. Para obtener instrucciones, consulte: Usar ensamblado y intrínsecos en código de C o C++.

La depende de un controlador de kernel

Los controladores de kernel requieren una compilación nativa para ARM64. No hay ninguna emulación presente en el kernel. Esto afecta principalmente a los escenarios de virtualización. Para las aplicaciones que usan controladores de dispositivo que requieren acceso directo a los elementos internos del sistema operativo o hardware que se ejecutan en modo kernel, en lugar del modo de usuario, y que aún no se han actualizado para admitir procesadores, consulte Compilar controladores de ARM64 con el WDK.

Además, se requieren controladores en Windows para compilarse con ARM64 y no puede emularse. Para las aplicaciones que dependen de controladores de software que aún no se han actualizado para admitir procesadores Arm64, consulte Compilar controladores de ARM64 con el WDK.

Herramientas para Windows en ARM

Además de la compatibilidad para Visual Studio y LLVM (CLANG) como se indica en la sección Requisitos previos de esta guía, las siguientes herramientas y marcos también son compatibles con ARM64:

Además de marcos de terceros, entre los que se incluyen:

¿Necesita ayuda? Sacar provecho del servicio de Asesoría de aplicaciones

El servicio de Asesoría de aplicaciones está disponible para ayudar a los desarrolladores a crear aplicaciones optimizadas para ARM. Este servicio se suma a nuestra promesa existente: las aplicaciones se ejecutarán en Windows en ARM y, si tiene algún problema, Microsoft le ayudará a corregirlo. Más información.

Registrarse en el servicio de asesoramiento de Windows ARM .