Поделиться через


Добавьте поддержку Арм в ваше приложение под Windows

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

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

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

Версии Arm Windows 10 включают технологию эмуляции, которая позволяет существующим немодифицированным приложениям x86 работать на устройствах Arm. Windows 11 расширяет эмуляцию для запуска неизмененных приложений x64 Windows на устройствах с процессором ARM.

Хотя возможность эмулировать 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) для Arm64 обеспечивают значительно лучшую производительность по сравнению с предыдущими эмулированными версиями.

  • (Необязательно) LLVM (Clang) версии 12+ или более поздней версии. LLVM 12 добавляет официальный двоичный выпуск, размещенный в Windows на Arm64, включая компилятор Clang, LLD Linker и библиотеки среды выполнения компилятора RT.

Если вы обновляете приложение Windows для поддержки Arm, используя устройства Intel на базе 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. В раскрывающемся меню «Платформы решений» на стандартной панели инструментов или в меню «Сборка» выберите Диспетчер конфигураций...
  3. Откройте раскрывающееся меню "Активная платформа решения" и выберите <"Создать...>".
  4. В раскрывающемся меню "Введите или выберите новую платформу", выберите ARM64 и убедитесь, что для значения "Копировать параметры из" установлено значение x64 с включенным флажком "Создать новые платформы проектов", а затем нажмите кнопку "ОК".

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

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

(Необязательно): если вы хотите проверить, создан ли двоичный файл приложения для Arm64, можно открыть каталог проекта в PowerShell (щелкните правой кнопкой мыши проект приложения в обозревателе решений Visual Studio и выберите "Открыть в терминале"). Перейдите в каталог, чтобы был выбран новый каталог bin\ARM64\Debug или каталог Release вашего проекта. Введите команду: 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 на портале 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, User-Agent признаки клиента позволяют различать клиентов на Arm-устройствах от клиентов на x86-устройствах.

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

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

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

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

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

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

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

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

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

  • Организация Linaro также работает с предприятиями и сообществами с открытым исходным кодом для разработки программного обеспечения на основе arm-технологий. Вы можете отправить запрос в службу технической поддержки Linaro, чтобы помочь обновить поддержку пакетов для любых отсутствующих зависимостей, связанных с Windows on 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 и совместим с MSVC на уровне ABI.

А также сторонние фреймворки, включая:

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

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

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