Добавление поддержки Arm в приложение Для Windows
Устройства на основе arm становятся все более популярными из-за их экономичного характера, длительной работы батареи и впечатляющей вычислительной мощности, в дополнение к поддержке Windows on Arm для единиц нейронной обработки (NPUs), настроенных для все более популярных ИИ и Машинное обучение рабочих нагрузок.
В этом руководстве описаны шаги по добавлению поддержки в приложения Windows для устройств, на основе процессоров Arm64. Руководство также поможет устранить возможные проблемы или блокировать (например, сторонние зависимости или подключаемые модули), которые могут препятствовать созданию версии приложения на основе Arm64.
Версии Arm Windows 10 включают технологию эмуляции, которая позволяет существующим немодифицированным приложениям x86 работать на устройствах Arm. Windows 11 расширяет эмуляцию для запуска неизмененных приложений x64 Windows на устройствах с arm-powered.
Хотя возможность эмулировать x64 и x86 на устройствах Arm является отличным шагом вперед, это руководство поможет вам добавить поддержку на основе Arm, чтобы ваше приложение могло воспользоваться преимуществами собственных показателей производительности и уникальными качествами устройств с поддержкой Arm64, в том числе:
- Оптимизация энергопотребления приложения для расширения работы батареи устройства.
- Оптимизация производительности ЦП, GPU и NPU для ускорения рабочих процессов, особенно при работе с ИИ.
Кроме того, драйверы ядра необходимо создать как собственный Arm64. В ядре отсутствует эмуляция. Это в первую очередь влияет на сценарии виртуализации. Для приложений, использующих драйверы устройств, требующие прямого доступа к внутренним компонентам ОПЕРАЦИОННОй системы или оборудования, работающего в режиме ядра, а не в пользовательском режиме, и которые еще не были обновлены для поддержки процессоров Arm64, см . статью "Создание драйверов Arm64 с помощью WDK".
Примечание
Прогрессивные веб-приложения (PWAs) уже будут выполняться с собственной производительностью Arm64.
При обновлении приложения с помощью устройства на основе Arm (машинного компиляции— создания кода для той же платформы, на которой выполняется работа), можно использовать следующее:
Знакомство с Visual Studio 17.10 — предварительная версия 1 (февраль 2024 г.)
Visual Studio 2022 версии 17.4 или более поздней версии. Это первый выпуск общедоступной версии Visual Studio, который изначально поддерживает создание и отладку приложений Arm64 на процессорах на основе Arm. Обе версии Visual Studio 2022 17.4 и Microsoft Visual C++ (MSVC) обеспечивают значительно лучшую производительность по сравнению с предыдущими эмулированными версиями.
(Необязательно) LLVM (Clang) версии 12+ или более поздней версии. LLVM 12 добавляет официальный двоичный выпуск, размещенный в Windows на Arm64, включая компилятор Clang, LLD Linker и библиотеки среды выполнения компилятора RT.
Если вы обновляете приложение Windows для поддержки Arm с помощью устройства на основе x64 или x86 (кросс-компиляция), можно использовать следующее:
- Visual Studio 2022 версии 17.10 (рекомендуется)
- Visual Studio 2019 версии 16.x
- Visual Studio 2017 версии 15.9 (UWP, мост для настольных компьютеров, win32 C++)
- LLVM (Clang) версии 12+
Существует несколько факторов, которые следует учитывать при выборе между кросс-компиляцией или собственной компиляцией, например доступным оборудованием и простотой выполнения теста.
Примечание
GCC, поддержка коллекции компилятора GNU нацелена на ближайшее будущее.
Чтобы обновить приложение для запуска в собственном коде в Arm64, выполните следующую команду:
- Добавление конфигурации Arm64 в проект в Visual Studio
- Тестирование и отладка нового созданного приложения Arm64
- Создание и тестирование приложения на устройствах Arm
Убедившись, что приложение успешно оптимизировано для устройств Arm:
Чтобы добавить новую платформу решения ARM64 с целевыми объектами отладки и выпуска в существующий проект приложения x64 или x86:
- Откройте решение (код проекта) в Visual Studio (см . предварительные требования для поддерживаемых версий).
- В раскрывающемся меню "Платформы решений" на панели инструментов "Стандартный" (или в меню "Сборка" выберите Configuration Manager...
- Откройте раскрывающееся меню "Активная платформа решения" и выберите "Создать...>".<
- В раскрывающемся меню "Введите или выберите новую платформу", выберите ARM64 и убедитесь, что для значения "Копировать параметры из" установлено значение x64 с включенным флажком "Создать новые платформы проектов", а затем нажмите кнопку "ОК".
Поздравляем! Вы начали добавлять поддержку Arm в приложение. Затем проверьте, успешно ли выполняется сборка решения Arm64.
Если решение не успешно создано, необходимо устранить проблемы, которые вызывают сбой сборки. Наиболее вероятной причиной является то, что зависимость недоступна для ARM64, которая рассматривается в разделе "Устранение неполадок " ниже.
(Необязательно). Если вы хотите проверить, создан ли двоичный файл приложения для Arm64, вы можете открыть каталог проекта в PowerShell (щелкните правой кнопкой мыши проект приложения в Visual Studio Обозреватель решений и выберите "Открыть в терминале"). Измените каталоги таким образом, чтобы выбран новый bin\ARM64\Debug
каталог проекта или каталог выпуска. Введите команду: dumpbin /headers .\<appname>.exe
(замена <appname>
именем приложения). Прокрутите вверх в результатах вывода терминала, чтобы найти FILE HEADER VALUES
раздел и подтвердить, что первая строка .AA64 machine (ARM64)
Чтобы проверить успешность сборки решения Arm64 после добавления платформы решения Arm64 в проект в Visual Studio:
- Закройте окно "Активная платформа решения".
- Измените параметр сборки с отладки на выпуск.
- В раскрывающемся меню "Сборка" выберите "Перестроить решение " и дождитесь перестроения проекта.
- Вы получите выходные данные "Перестроить все успешно". Если нет, см . раздел "Устранение неполадок " ниже.
После создания двоичных файлов для приложения для поддержки Arm64 необходимо протестировать их. Для этого потребуется устройство или виртуальная машина под управлением Windows в Arm.
Если вы выполняете разработку на устройстве Windows на устройстве Arm, у вас есть простая настройка с помощью локальной отладки Visual Studio. Если перекрестная компиляция (с помощью устройства, которое не запущено на arm-процессоре), вы хотите использовать удаленную отладку на устройстве Windows на устройстве Arm или виртуальной машине, чтобы обеспечить возможности разработки в Visual Studio при запуске приложения Arm64 на другом устройстве.
Если вы ищете оборудование для непрерывной интеграции (CI) и тестирования, это несколько устройств Windows с процессором на основе Arm64:
Сведения о настройке виртуальной машины под управлением Windows on Arm для поддержки CI и тестирования см. в кратком руководстве по созданию виртуальной машины Windows на arm в портал Azure.
Ознакомьтесь с объявлением блога Azure о общедоступной доступности для Azure Виртуальные машины с процессорами на основе Ampere Altra Arm с возможностью запуска версий Windows 11 Pro и Enterprise на основе Arm64.
Дополнительные сведения о Windows 11 в Предварительной версии Arm (VHDX) для создания локальной виртуальной машины Windows на виртуальной машине Arm с помощью Hyper-V и VHDX предварительной оценки Windows. *Виртуальные машины Arm64 поддерживаются только на устройствах, удовлетворяющих предварительным требованиям. Создание виртуальных машин Arm64 не поддерживается на оборудовании x64. Вам потребуется разместить виртуальную машину в облаке, см. ссылку краткого руководства выше.
Ознакомьтесь с видео "Спросите эксперта: создание приложений с помощью виртуальных машин Azure на основе Ampere".
Добавление прохождения тестовой автоматизации важно учитывать стратегию непрерывной интеграции и непрерывной доставки (CI/CD). Для решений Arm64, работающих в Windows, важно запустить набор тестов на архитектуре Arm64. Это может быть фактический Windows на оборудовании Arm, используя одно из устройств Arm, перечисленных выше, или виртуальную машину из перечисленных выше виртуальных машин.
Компиляция приложения удобнее выполнять на том же компьютере, что и тесты, но во многих случаях не требуется. Вместо этого можно расширить существующую инфраструктуру сборки, чтобы создать перекрестные скомпилированные выходные данные для Arm64.
При публикации в Microsoft Store после создания версии приложения Arm64, выполнив описанные выше действия, вы можете обновить существующий пакет приложения в Microsoft Store, перейдя на панель мониторинга Центра партнеров и добавив в отправку только что созданные двоичные файлы ARM64.
Если приложение еще не опубликовано в Microsoft Store, вы можете выполнить инструкции по созданию отправки приложения на основе того, хотите ли вы отправить MSI или EXE, пакет MSIX, PWA или надстройку приложения.
Если вы создаете собственный установщик, убедитесь, что он сможет успешно установить новую версию Arm64. Большинство платформ установщиков, таких как WiX, Squirrel, InnoSetup, InstallAware и другие поддерживают Windows в Arm без проблем.
Если вы предлагаете установщик приложения с веб-страницы, вы можете использовать подсказки клиента user-Agent, чтобы определить, когда клиент посещает устройство Windows на устройстве Arm и предложить им обновленную версию приложения Arm. В отличие от строки агента пользователя, подсказки клиента user-Agent позволяют различать клиентов в Arm от клиентов на устройствах x86.
Теперь, когда у вас опубликована версия Arm64 вашего приложения, необходимо убедиться, что она остается обновленной так же, как и другие версии приложения. Лучше всего сохранить версии и функции, согласованные между архитектурами, чтобы избежать путаницы клиентов в будущем.
Распространенные проблемы, которые могут препятствовать добавлению или блокировке добавления версии Arm64 существующего приложения x64 или x86 Для Windows:
- Зависимость, не скомпилированная для ARM64, блокирует выполнение успешной сборки.
- Код написан для конкретной архитектуры, отличной от Arm64.
- Приложение использует драйвер ядра.
- Вы застряли и нуждаетесь в помощи.
Если вы не можете выполнить сборку из-за зависимости, будь то внутренняя, от 3-сторонней или из библиотеки с открытым кодом, вам потребуется либо найти способ обновления этой зависимости для поддержки архитектуры ARM64 или удаления его.
Для внутренних зависимостей рекомендуется перестроить зависимость для поддержки ARM64.
Для 3-х сторонних зависимостей рекомендуется подать запрос на перестроение хранителя с поддержкой ARM64.
Для открытый код зависимостей рекомендуется проверить vcpkg, чтобы узнать, существует ли более новая версия зависимости, включающая поддержку ARM64, на которую можно обновить. Если обновление не существует, рассмотрите возможность добавления поддержки ARM64 в пакет самостоятельно. Многие открытый код обслуживающие будут благодарны за вклад.
Организация Linaro также работает с предприятиями и открытый код сообществами для разработки программного обеспечения на основе arm-технологий. Вы можете отправить запрос в службу обслуживания Linaro, чтобы помочь обновить поддержку пакетов для любых отсутствующих зависимостей, связанных с Windows в Arm.
Рекомендуется использовать Arm64EC. Версии зависимостей Arm64EC можно использовать для перестроения приложения, а также использования версий зависимостей x64. Любой код x64, включая код из зависимостей, в процессе Arm64EC будет выполняться при эмуляции в приложении. (Версии зависимостей Arm64 не будут использоваться в этом случае.)
Последним вариантом будет удаление и(или) замена зависимости от проекта приложения.
- Для сопоставления доступных инструкций и функций на ЦП Arm необходимо изменить определенные сборки или встроенные встроенные вызовы функций. Инструкции см. в статье "Использование сборки и встроенных функций в коде C или C++".
Драйверы ядра должны быть созданы как собственные Arm64. В ядре отсутствует эмуляция. Это в первую очередь влияет на сценарии виртуализации. Для приложений, использующих драйверы устройств, требующие прямого доступа к внутренним компонентам ОПЕРАЦИОННОй системы или оборудования, работающего в режиме ядра, а не в пользовательском режиме, и которые еще не были обновлены для поддержки процессоров Arm64, см . статью "Создание драйверов Arm64 с помощью WDK".
Кроме того, драйверы в Windows должны быть созданы как Arm64 и не могут быть эмулированы. Для приложений, использующих драйверы программного обеспечения, которые еще не были обновлены для поддержки процессоров Arm64, см. статью "Создание драйверов Arm64 с помощью WDK".
Помимо поддержки Visual Studio и LLVM (CLANG), как описано в разделе предварительных требований этого руководства, также поддерживаются следующие средства и платформы для Arm64:
- .NET 7
- .NET 6 (LTS)
- .NET 5.0.8+
- платформа .NET Framework 4.8.1
- Clang-cl компилирует код C++ для Windows и может служить заменой раскрывающегося списка для компилятора и компоновщика MSVC. Он по-прежнему использует заголовки и библиотеки из MSVC и совместим с ABI с MSVC.
А также сторонние платформы, в том числе:
- Qt для Windows, Библиотека Boost C++, Bazel, средство сборки и тестирования с открытым исходным кодом.
- Поддержка GCC и Mingw / GNU Toolchain для Windows on Arm выполняется в Linaro.
- Более полный список см. в разделе Windows On Arm (WOA) — Confluence (atlassian.net).
Служба рекомендаций по arm для обеспечения поддержки разработчиков создания приложений, оптимизированных для Arm. Эта служба в дополнение к нашему существующему обещанию: ваши приложения будут работать в Windows на Arm, и при возникновении каких-либо проблем корпорация Майкрософт поможет вам устранить их. Подробнее.
Зарегистрируйтесь в службах рекомендаций Windows Arm.
Отзыв о Windows on Arm
Windows on Arm — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: