Добавление поддержки Arm в приложение Для Windows

Устройства на основе arm становятся все более популярными из-за их экономичного характера, длительной работы батареи и впечатляющей вычислительной мощности, в дополнение к поддержке Windows on Arm для единиц нейронной обработки (NPUs), настроенных для все более популярных ИИ и Машинное обучение рабочих нагрузок.

В этом руководстве описаны шаги по добавлению поддержки в приложения Windows для устройств, на основе процессоров Arm64. Руководство также поможет устранить возможные проблемы или блокировать (например, сторонние зависимости или подключаемые модули), которые могут препятствовать созданию версии приложения на основе Arm64.

Эмуляция на устройствах на основе Arm для приложений Windows x86 или x64

Версии 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 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 (кросс-компиляция), можно использовать следующее:

Существует несколько факторов, которые следует учитывать при выборе между кросс-компиляцией или собственной компиляцией, например доступным оборудованием и простотой выполнения теста.

Примечание.

GCC, поддержка коллекции компилятора GNU нацелена на ближайшее будущее.

Шаги по добавлению собственной поддержки Arm64

Чтобы обновить приложение для запуска в собственном коде в Arm64, выполните следующую команду:

  1. Добавление конфигурации Arm64 в проект в Visual Studio
  2. Тестирование и отладка нового созданного приложения Arm64
  3. Создание и тестирование приложения на устройствах Arm

Убедившись, что приложение успешно оптимизировано для устройств Arm:

  1. Обновление установщика и публикация обновленного приложения
  2. Планирование текущих обновлений

Шаг 1. Добавление конфигурации Arm64 в проект в Visual Studio

Чтобы добавить новую платформу решения ARM64 с целевыми объектами отладки и выпуска в существующий проект приложения x64 или x86:

  1. Откройте решение (код проекта) в Visual Studio (см . предварительные требования для поддерживаемых версий).
  2. В раскрывающемся меню "Платформы решений" на панели инструментов "Стандартный" (или в меню "Сборка" выберите Configuration Manager...
  3. Откройте раскрывающееся меню "Активная платформа решения" и выберите "Создать...>".<
  4. В раскрывающемся меню "Введите или выберите новую платформу" выберите ARM64 и убедитесь, что для параметра "Копировать параметры из" задано значение x64 с включенным параметром "Создать новые платформы проектов" проверка box, а затем нажмите кнопку "ОК".

Поздравляем! Вы начали добавлять поддержку Arm в приложение. Затем проверка, чтобы узнать, успешно ли выполняется сборка решения Arm64.

Если решение не успешно создано, необходимо устранить проблемы, которые вызывают сбой сборки. Наиболее вероятной причиной является то, что зависимость недоступна для ARM64, которая рассматривается в разделе "Устранение неполадок " ниже.

(Необязательно). Если вы хотите проверить, создан ли двоичный файл приложения для Arm64, вы можете открыть каталог проекта в PowerShell (щелкните правой кнопкой мыши проект приложения в Visual Studio Обозреватель решений и выберите "Открыть в терминале"). Измените каталоги таким образом, чтобы выбран новый bin\ARM64\Debug каталог проекта или каталог выпуска. Введите команду: dumpbin /headers .\<appname>.exe (замена <appname> именем приложения). Прокрутите вверх в результатах вывода терминала, чтобы найти FILE HEADER VALUES раздел и подтвердить, что первая строка .AA64 machine (ARM64)

Шаг 2. Тестирование и отладка недавно созданного приложения Arm64

Чтобы проверка успешно ли сборка решения Arm64 после добавления платформы решения Arm64 в проект в Visual Studio:

  1. Закройте окно "Активная платформа решения".
  2. Измените параметр сборки с отладки на выпуск.
  3. В раскрывающемся меню "Сборка" выберите "Перестроить решение " и дождитесь перестроения проекта.
  4. Вы получите выходные данные "Перестроить все успешно". Если нет, см . раздел "Устранение неполадок " ниже.

После создания двоичных файлов для приложения для поддержки Arm64 необходимо протестировать их. Для этого потребуется устройство или виртуальная машина под управлением Windows в Arm.

Если вы выполняете разработку на устройстве Windows на устройстве Arm, у вас есть простая настройка с помощью локальной отладки Visual Studio. Если перекрестная компиляция (с помощью устройства, которое не запущено на arm-процессоре), вы хотите использовать удаленную отладку на устройстве Windows на устройстве Arm или виртуальной машине, чтобы обеспечить возможности разработки в Visual Studio при запуске приложения Arm64 на другом устройстве.

Windows на оборудовании Arm или виртуальных машинах, доступных для тестирования

Если вы ищете оборудование для непрерывной интеграции (CI) и тестирования, это несколько устройств Windows с процессором на основе Arm64:

Сведения о настройке виртуальной машины под управлением Windows on Arm для поддержки CI и тестирования см. в кратком руководстве по созданию виртуальной машины Windows на arm в портал Azure.

Шаг 3. Создание и тестирование приложения на устройствах Arm

Добавление прохождения тестовой автоматизации важно учитывать стратегию непрерывной интеграции и непрерывной доставки (CI/CD). Для решений Arm64, работающих в Windows, важно запустить набор тестов на архитектуре Arm64. Это может быть фактический Windows на оборудовании Arm, используя одно из устройств Arm, перечисленных выше, или виртуальную машину из перечисленных выше виртуальных машин.

Компиляция приложения удобнее выполнять на том же компьютере, что и тесты, но во многих случаях не требуется. Вместо этого можно расширить существующую инфраструктуру сборки, чтобы создать перекрестные скомпилированные выходные данные для Arm64.

Шаг 4. Обновление установщика и публикация обновленного приложения

При публикации в 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.

Шаг 5. Планирование текущих обновлений

Теперь, когда у вас опубликована версия Arm64 вашего приложения, необходимо убедиться, что она остается обновленной так же, как и другие версии приложения. Лучше всего сохранить версии и функции, согласованные между архитектурами, чтобы избежать путаницы клиентов в будущем.

Устранение неполадок

Распространенные проблемы, которые могут препятствовать добавлению или блокировке добавления версии Arm64 существующего приложения x64 или x86 Для Windows:

Зависимость, не скомпилированная для ARM64, блокирует выполнение успешной сборки

Если вы не можете выполнить сборку из-за зависимости, будь то внутренняя, от 3-сторонней или из библиотеки с открытым кодом, вам потребуется либо найти способ обновления этой зависимости для поддержки архитектуры ARM64 или удаления его.

  • Для внутренних зависимостей рекомендуется перестроить зависимость для поддержки ARM64.

  • Для 3-х сторонних зависимостей рекомендуется подать запрос на перестроение хранителя с поддержкой ARM64.

  • Для зависимостей открытый код рекомендуется проверка vcpkg, чтобы узнать, существует ли более новая версия зависимости, включающая поддержку ARM64, на которую можно обновить. Если обновление не существует, рассмотрите возможность добавления поддержки ARM64 в пакет самостоятельно. Многие открытый код обслуживающие будут благодарны за вклад.

  • Организация Linaro также работает с предприятиями и открытый код сообществами для разработки программного обеспечения на основе arm-технологий. Вы можете отправить запрос в службу обслуживания Linaro, чтобы помочь обновить поддержку пакетов для любых отсутствующих зависимостей, связанных с Windows в Arm.

  • Рекомендуется использовать Arm64EC. Версии зависимостей Arm64EC можно использовать для перестроения приложения, а также использования версий зависимостей x64. Любой код x64, включая код из зависимостей, в процессе Arm64EC будет выполняться при эмуляции в приложении. (Версии зависимостей Arm64 не будут использоваться в этом случае.)

  • Последним вариантом будет удаление и(или) замена зависимости от проекта приложения.

Код написан для конкретной архитектуры, отличной от Arm64

Приложение использует драйвер ядра

Драйверы ядра должны быть созданы как собственные Arm64. В ядре отсутствует эмуляция. Это в первую очередь влияет на сценарии виртуализации. Для приложений, использующих драйверы устройств, требующие прямого доступа к внутренним компонентам ОПЕРАЦИОННОй системы или оборудования, работающего в режиме ядра, а не в пользовательском режиме, и которые еще не были обновлены для поддержки процессоров Arm64, см . статью "Создание драйверов Arm64 с помощью WDK".

Кроме того, драйверы в Windows должны быть созданы как Arm64 и не могут быть эмулированы. Для приложений, использующих драйверы программного обеспечения, которые еще не были обновлены для поддержки процессоров Arm64, см. статью "Создание драйверов Arm64 с помощью WDK".

Цепочка инструментов для Windows в Arm

Помимо поддержки 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.

А также сторонние платформы, в том числе:

Нужна помощь? Использование службы App Assure

Служба рекомендаций по arm для обеспечения поддержки разработчиков создания приложений, оптимизированных для Arm. Эта служба в дополнение к нашему существующему обещанию: ваши приложения будут работать в Windows на Arm, и при возникновении каких-либо проблем корпорация Майкрософт поможет вам устранить их. Подробнее.

Зарегистрируйтесь в службах рекомендаций Windows Arm.