Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Arm64EC ("Совместимая с эмуляцией") позволяет создавать новые собственные приложения или постепенно переходить существующие приложения x64, чтобы воспользоваться преимуществами собственной скорости и производительности, возможной с помощью устройств с поддержкой Arm, включая более эффективное потребление питания, время работы батареи и ускорение рабочих нагрузок искусственного интеллекта и машинного обучения.
Arm64EC — это новый двоичный интерфейс приложения (ABI) для приложений, работающих на устройствах Arm с Windows 11. Это функция Windows 11, которая требует использования пакета SDK для Windows 11 и недоступна в Windows 10 на Arm.
Совместимость
Код, созданный как Arm64EC, взаимодействует с кодом x64, выполняемым под эмуляции в рамках того же процесса. Код Arm64EC в процессе выполняется с собственной производительностью, а любой код x64 выполняется с помощью эмуляции, встроенной в Windows 11. Даже если ваше приложение использует существующие зависимости или подключаемые модули, которые еще не поддерживают Arm, вы можете начать перестроение частей приложения как Arm64EC, чтобы получить преимущества собственной производительности.
Arm64EC гарантирует взаимодействие с x64, следуя соглашениям программного обеспечения x64, включая соглашение о вызовах, использование стека, структуру данных и определения препроцессора. Однако код Arm64EC несовместим с кодом, созданным как Arm64, который использует другой набор соглашений о программном обеспечении.
Операционная система Windows 11 в Arm сильно зависит от взаимодействия Arm64EC, чтобы обеспечить выполнение приложений x64. Большинство кодов операционной системы, загруженных приложением x64, работающим в Windows 11 в Arm, компилируется как Arm64EC, что обеспечивает собственную производительность этого кода без знания приложения.
Процесс x64 или Arm64EC может загружать и вызывать двоичные файлы x64 и Arm64EC, а процесс Arm64 может загружать только двоичные файлы Arm64. Обе архитектуры могут загружать двоичные файлы Arm64X, так как они содержат код для x64 и Arm64.
| Архитектура процесса | Двоичный файл x64 | Двоичный файл Arm64EC | Двоичный файл Arm64 |
|---|---|---|---|
| x64/Arm64EC | Supported | Supported | Не поддерживается |
| Arm64 | Не поддерживается | Не поддерживается | Supported |
Аналогичным образом, во время сборки двоичные файлы Arm64EC могут связываться как в libs x64, так и в arm64EC, в то время как двоичные файлы Arm64 могут ссылаться только в libs Arm64.
| Архитектура PE | x64 lib | Arm64EC библиотека | Arm64 lib |
|---|---|---|---|
| Arm64EC | Supported | Supported | Не поддерживается |
| Arm64 | Не поддерживается | Не поддерживается | Supported |
Дополнительные сведения о том, как ABI Arm64EC обеспечивает взаимодействие, см. в разделе "Общие сведения об ABI Arm64EC" и коде сборки.
Использование Arm64EC для ускорения работы существующего приложения в Windows 11 на Arm
Arm64EC позволяет постепенно перенести код в существующем приложении из эмуляции в собственный. На каждом шаге по пути приложение продолжает работать хорошо без необходимости перекомпилировать все одновременно.
На приведенном выше рисунке показан упрощенный пример полностью эмулированной рабочей нагрузки x64, которая занимает некоторое время, которое затем постепенно улучшается с помощью Arm64EC:
- Начиная с полностью эмулированной рабочей нагрузки x64
- После перекомпилирования наиболее интенсивных частей ЦП в Arm64EC
- После продолжения повторной компиляции дополнительных модулей x64 с течением времени
- Конечный результат полного собственного приложения Arm64EC
Перекомпилируя модули, которые занимают больше всего времени или являются наиболее интенсивными ЦП от x64 до Arm64EC, вы получаете наибольшее улучшение для наименьшего количества усилий на каждом шаге.
Зависимости приложений
При использовании Arm64EC для перестроения приложения используйте версии зависимостей Arm64EC, но также можно использовать версии зависимостей x64. Нельзя использовать версии зависимостей Arm64.
Любой код x64, включая код из зависимостей, внутри процесса Arm64EC выполняется в режиме эмуляции в приложении. Сначала уделите внимание наиболее ресурсоемким зависимостям для перехода с x64 на Arm64EC с целью улучшения производительности вашего приложения.
Определение двоичных файлов и приложений Arm64EC
Приложения, работающие в Windows 11 в Arm, взаимодействуют с двоичными файлами Arm64EC, как будто они двоичные файлы x64. Приложению не нужно знать, в какой степени код в двоичном файле перекомпилируется как Arm64EC.
Чтобы определить эти двоичные файлы, их можно увидеть в командной строке разработчика с помощью link /dump /headers.
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64) (ARM64X)
Сочетание (x64) и (ARM64X) указывает, что часть двоичного файла перекомпилируется как Arm64EC, несмотря на то, что двоичный файл по-прежнему является x64. Двоичный файл с заголовком компьютера, который содержит (ARM64) и (ARM64X) — это pe-файл Arm64X, который можно загрузить в приложения x64 и Arm64.
Вы также можете использовать диспетчер задач Windows, чтобы определить, компилируется ли приложение как Arm64EC. На вкладке "Сведения " диспетчера задач в столбце "Архитектура " отображается arm64 (совместимая с x64) для приложений, основной исполняемый файл которых частично или полностью компилируется как Arm64EC.
Следующие шаги
См. статью "Начало работы с Arm64EC ", чтобы узнать, как создавать или обновлять приложения Win32 с помощью Arm64EC.
Windows on Arm