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:
- Visual Studio 2022 v17.10 (recomendado)
- Visual Studio 2019 v16.x[https://blogs.technet.microsoft.com/askperf/2008/11/18/disabling-unnecessary-services-a-word-to-the-wise/]()
- Visual Studio 2017 v15.9 y posteriores (UWP, Puente de dispositivo de escritorio, win32 C++)[https://blogs.technet.microsoft.com/askperf/2008/11/18/disabling-unnecessary-services-a-word-to-the-wise/]()
- LLVM (Clang) v12+
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:
- Agregue una configuración de ARM64 al proyecto en Visual Studio.
- Pruebe y depure la aplicación ARM64 recién compilada.
- 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:
- Actualice el instalador y publique la aplicación actualizada.
- 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:
- Abra la solución (código de proyecto) en Visual Studio (consulte los requisitos previos para las versiones compatibles).
- En el menú desplegable "Plataformas de soluciones" de la barra de herramientas Estándar (o en el menú "Compilar"), seleccione Administrador de configuración...
- Abra el menú desplegable "Plataforma de solución activa" y seleccione <Nueva...>.
- 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:
- Cierre la ventana "Plataforma de soluciones activas".
- CAmbie la configuración de compilación de Depuración a Versión.
- En el menú desplegable "Compilar", seleccione Volver a compilar solución y espere a que se vuelva a compilar el proyecto.
- 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.
Lea el anuncio de blog de Azure de disponibilidad general para Azure Virtual Machines con procesadores basados en Arm de Ampere Altra con la capacidad de ejecutar versiones basadas en Arm64 de Windows 11 Pro y Enterprise.
Aprende más sobre Windows 11 en Arm Insider Preview (VHDX) para crear Windows local en máquinas virtuales ARM con Hyper-V y Windows Insider VHDX. *Las máquinas virtuales ARM64 solo se admiten en dispositivos que cumplan los requisitos previos. No se admite la creación de máquinas virtuales Arm64 en hardware x64: tendrá que hospedar la máquina virtual en la nube; consulte el vínculo de inicio rápido anterior.
Mira el vídeo "Preguntar al experto: Crear aplicaciones con máquinas virtuales de Azure basadas en Ampere".
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.
- El código está escrito para una arquitectura específica diferente de ARM64.
- La aplicación depende de un controlador de kernel.
- Está atascado y necesita asistencia.
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:
- .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 reemplazo para el compilador y vinculador MSVC. Todavía usa encabezados y bibliotecas de MSVC y tiene compatibilidad de ABI con MSVC.
Además de marcos de terceros, entre los que se incluyen:
- Qt for Windows, Biblioteca Boost C++, Bazel, una compilación y prueba de código abierto.
- Compatibilidad para GCC y herramientas de Mingw/GNU para Windows en ARM es en curso en Linaro.
- Para ver una lista más completa, consulte Windows en ARM (WOA): Confluence (atlassian.net).
¿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 .