Compartir a través de


Incorporación de compatibilidad con Arm a la aplicación de Windows

Los dispositivos basados en ARM se están volviendo cada vez más populares debido a su bajo consumo de energía, su mayor duración de batería y su impresionante potencia de procesamiento. Windows en Arm admite unidades de procesamiento neuronal (NPUs) 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. También proporciona instrucciones sobre formas de solucionar posibles problemas o bloqueadores, como dependencias de terceros o complementos, que podrían interferir con la creación de una versión basada en Arm64 de la aplicación.

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

Las versiones arm de Windows 10 incluyen tecnología de emulación que permite que las aplicaciones x86 existentes sin modificar se ejecuten 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 adelante, esta guía le ayuda a agregar compatibilidad nativa de Arm para que la aplicación pueda aprovechar las ventajas de las mejoras de rendimiento nativas y las cualidades únicas de los dispositivos con tecnología Arm64, entre las que se incluyen:

  • 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, los controladores de kernel deben compilarse como arm64 nativos. El kernel no incluye emulación. Esta limitación 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 actualizan para admitir procesadores Arm64, consulte Building Arm64 Drivers with the WDK.

Nota:

Aplicaciones web progresivas (PWA) ya se ejecutan con el rendimiento nativo de Arm64.

Prerrequisitos

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 es la primera versión de disponibilidad general de Visual Studio que admite de forma nativa la creación y depuración de aplicaciones arm64 en procesadores basados en Arm. Las versiones nativas de Arm64 de Visual Studio 2022 17.4 y Microsoft Visual C++ (MSVC) proporcionan un rendimiento significativamente mejor en comparación con versiones emuladas anteriores.

  • (Opcional) LLVM (Clang) v12+ o posterior. LLVM 12 añade una versión binaria oficial alojada en Windows sobre Arm64, que incluye un compilador Clang, el enlazador LLD y las bibliotecas de tiempo de ejecución de compiler-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:

Tenga en cuenta varios factores 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:

GCC, la Colección de Compiladores de GNU tendrá soporte previsto para el futuro próximo.

Pasos para agregar compatibilidad nativa con Arm64

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

  1. Agregar una configuración de Arm64 al proyecto en Visual Studio
  2. Prueba y depuración de la aplicación Arm64 recién compilada
  3. Compilar y probar la aplicación en dispositivos Arm

Después de confirmar que la aplicación está optimizada para dispositivos Arm:

  1. Actualizar el instalador y publicar la aplicación actualizada
  2. Plan para actualizaciones en curso

Paso 1: Agregar una configuración de Arm64 al proyecto en Visual Studio

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

  1. Abra la solución (código del proyecto) en Visual Studio (consulte requisitos previos para las versiones admitidas).
  2. En el menú desplegable "Plataformas de solución" de la barra de herramientas Estándar (o en el menú "Compilar"), seleccione Configuration Manager...
  3. Abra el menú desplegable "Plataforma de soluciones activas" y seleccione <Nuevo...>.
  4. En el menú desplegable "Escriba o seleccione la nueva plataforma", seleccione ARM64 y asegúrese de que el valor "Copiar configuración desde" esté establecido en x64 con la casilla "Crear nuevas plataformas de proyecto" habilitada y, a continuación, seleccione Aceptar.

¡Felicidades! Ha empezado a agregar compatibilidad con Arm a la aplicación. A continuación, compruebe si la solución Arm64 se compila correctamente.

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

(Opcional) : para comprobar que el binario de la aplicación está compilado para Arm64, abra el directorio del proyecto en PowerShell (haga clic con el botón derecho en el proyecto de aplicación en el Explorador de soluciones de Visual Studio y seleccione Abrir en terminal). Cambia de directorio de modo que selecciones el nuevo directorio bin\ARM64\Debug o Release 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 FILE HEADER VALUES y confirme que la primera línea es AA64 machine (ARM64).

Paso 2: Probar y depurar la aplicación Arm64 recién compilada

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

  1. Cierre la ventana Plataforma de soluciones activas .
  2. Cambie la configuración de compilación de de depuración a release.
  3. En el menú desplegable Compilar , seleccione Recompilar solución y espere a que el proyecto se recompile.
  4. Recibirá una salida recompilar todo correctamente . Si no es así, consulte la sección Solución de problemas .

Una vez compilados los archivos binarios para que la aplicación admita Arm64, quiere probarlos. Esa prueba requiere tener un dispositivo o una máquina virtual que ejecute Windows en Arm.

Si está desarrollando en un dispositivo Windows sobre Arm, la configuración de la depuración local de Visual Studio es sencilla. Si está realizando una compilación cruzada (usando un dispositivo que no se ejecuta en un procesador Arm), debería usar la depuración remota en un dispositivo con Windows sobre Arm o en una máquina virtual para habilitar su 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 busca 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: Compilación y prueba de la aplicación en dispositivos Arm

Agregar un pase de automatización de pruebas es una consideración importante para la estrategia de integración continua y entrega continua (CI/CD). En el caso de las soluciones arm64 que se ejecutan en Windows, es importante ejecutar el conjunto de pruebas en la arquitectura arm64. Esta arquitectura podría ser Windows auténtico en hardware Arm, utilizando uno de los dispositivos Arm listados previamente o una máquina virtual de las mencionadas anteriormente.

La compilación de la aplicación es más conveniente cuando se realiza en la misma máquina que las pruebas, pero en muchos casos no es necesaria. 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: Actualizar el instalador y publicar la aplicación actualizada

Si publicas en Microsoft Store, una vez compilas una versión arm64 de la aplicación siguiendo los pasos anteriores, puedes 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 aún no publicas tu aplicación en Microsoft Store, puedes seguir las instrucciones para crear un envío de aplicación en función de si quieres enviar un paquete MSI o EXE, paquete MSIX, PWA o complemento de la 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, InstallAwarey otros admiten Windows en Arm sin problema.

Si ofreces el instalador de la aplicación desde una página web, puedes usar User-Agent sugerencias de cliente para detectar cuándo el cliente visita desde un dispositivo Windows en Arm y ofrecerles la versión nativa de Arm actualizada de la aplicación. A diferencia de la cadena user-agent, Client Hints User-Agent permite diferenciar a los clientes que utilizan Arm de aquellos que utilizan dispositivos x86.

Paso 5: Planear actualizaciones en curso

Ahora que publica una versión de Arm64 de la aplicación, quiere asegurarse de que permanece actualizada de la misma manera que otras versiones de la aplicación. Mantenga las versiones y características alineadas entre arquitecturas para evitar confusiones de clientes en el futuro.

Solución de problemas

Entre los problemas comunes que interfieren o impiden agregar 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 puedes compilar la aplicación debido a una dependencia, ya sea interna, desde un tercero o desde una biblioteca de código abierto, debes actualizar esa dependencia para admitir la arquitectura ARM64 o quitarla.

  • Para las dependencias internas, vuelva a generar la dependencia para la compatibilidad con ARM64.

  • Para las dependencias de terceros, solicite al mantenedor que recompile la dependencia con compatibilidad con ARM64.

  • Para las dependencias de código abierto, compruebe vcpkg para ver si una versión más reciente de la dependencia incluye compatibilidad con ARM64 a la que puede 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 mantenedores de código abierto aprecian la contribución.

  • La organización Linaro trabaja con empresas y comunidades de código abierto para desarrollar software en tecnología basada en Arm. Puede presentar una solicitud con el Service Desk de Linaro para actualizar el soporte de paquetes para las dependencias que faltan relacionadas con Windows en Arm.

  • Use Arm64EC. Se pueden usar las versiones Arm64EC de las dependencias para recompilar una aplicación, mientras se siguen utilizando las versiones x64 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. (Las versiones arm64 de dependencias no se pueden usar en este caso).

  • Quite y reemplace la dependencia en su proyecto de aplicación.

El código se escribe para una arquitectura específica distinta de Arm64

  • Debe modificar las llamadas de ensamblador específico del CPU o las llamadas a funciones intrínsecas en línea para que coincidan con las instrucciones y funciones disponibles en la CPU Arm. Para orientarse, consulte: Usar ensamblado e intrínsecos en código de C o C++.

La aplicación se basa en un controlador de kernel

Los controladores de kernel deben compilarse como Arm64 nativos. El kernel no proporciona ninguna emulación. Esta limitación 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 actualizan para admitir procesadores Arm64, consulte Building Arm64 Drivers with the WDK.

Además, los controladores de Windows deben compilarse como Arm64 y no se pueden emular. Para las aplicaciones que dependen de controladores de software que aún no se han actualizado para admitir procesadores Arm64, consulte Building Arm64 Drivers with the WDK (Creación de controladores arm64 con WDK).

Cadena de herramientas para Windows en Arm

Además de la compatibilidad con Visual Studio y LLVM (CLANG) como se comparte en la sección requisitos previos de de esta guía, también se admiten las siguientes herramientas y marcos para Arm64:

  • de .NET 7
  • .NET 6 (LTS)
  • .NET 5.0.8+
  • .NET Framework 4.8.1
  • clang-cl compila código de C++ para Windows y puede servir como sustituto del compilador y enlazador de MSVC. Todavía usa encabezados y bibliotecas de MSVC y es compatible en términos de ABI con MSVC.

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

¿Necesita ayuda? Aprovechar nuestro servicio App Assure

App Assure Arm Advisory Service está disponible para ayudar a los desarrolladores a crear aplicaciones optimizadas para Arm. Este servicio se suma a nuestra promesa existente: las aplicaciones se ejecutan en Windows en Arm y, si encuentra algún problema, Microsoft le ayuda a corregirlos. Más información.

Regístrese en los servicios de asesoramiento de Windows Arm.