Partilhar via


Arm64EC - Crie e porte aplicativos para desempenho nativo no Arm

O Arm64EC ("Emulation Compatible") permite que você crie novos aplicativos nativos ou faça a transição incremental de aplicativos x64 existentes para aproveitar a velocidade e o desempenho nativos possíveis com dispositivos alimentados por Arm, incluindo melhor consumo de energia, vida útil da bateria e cargas de trabalho aceleradas de IA e ML.

Arm64EC é uma nova interface binária de aplicativo (ABI) para aplicativos executados em dispositivos Arm com Windows 11. É um recurso do Windows 11 que requer o uso do SDK do Windows 11 e não está disponível no Windows 10 no Arm.

Interoperabilidade

Código construído como Arm64EC interopera com código x64 em execução sob emulação dentro do mesmo processo. O código Arm64EC no processo é executado com desempenho nativo, enquanto qualquer código x64 é executado usando emulação que vem integrada com o Windows 11. Mesmo que seu aplicativo dependa de dependências ou plug-ins existentes que ainda não suportam Arm, você pode começar a reconstruir partes do seu aplicativo como Arm64EC para obter os benefícios do desempenho nativo.

Arm64EC garante a interoperação com x64 ao seguir as convenções de software x64, incluindo protocolo de chamada, uso de pilha, layout de estruturas de dados e definições de pré-processador. No entanto, o código Arm64EC não é compatível com o código construído como Arm64, que usa um conjunto diferente de convenções de software.

O próprio sistema operacional Windows 11 on Arm depende fortemente da interoperabilidade do Arm64EC para permitir a execução de aplicativos x64. A maioria do código do sistema operacional carregado por um aplicativo x64 em execução no Windows 11 no Arm é compilado como Arm64EC, permitindo o desempenho nativo para esse código sem que o aplicativo saiba.

Um processo x64 ou Arm64EC pode carregar e chamar binários x64 e Arm64EC, enquanto um processo Arm64 só pode carregar binários Arm64. Ambas as arquiteturas podem carregar binários Arm64X , pois eles contêm código para x64 e Arm64.

Arquitetura de processo binário x64 Binário Arm64EC Binário Arm64
x64/Arm64EC Supported Supported Não suportado
Arm64 Não suportado Não suportado Supported

Da mesma forma, em tempo de compilação, os binários Arm64EC podem ser vinculados a bibliotecas x64 e Arm64EC, enquanto os binários Arm64 só podem ser vinculados a bibliotecas Arm64.

Arquitetura PE x64 lib | Arm64EC lib Arm64 lib
Arm64EC Supported Supported Não suportado
Arm64 Não suportado Não suportado Supported

Para obter mais detalhes sobre como a ABI Arm64EC permite a interoperabilidade, consulte Understanding Arm64EC ABI and assembly code.

Use Arm64EC para tornar um aplicativo existente mais rápido no Windows 11 no Arm

O Arm64EC permite que você faça a transição incremental do código em seu aplicativo existente de emulado para nativo. Em cada etapa ao longo do caminho, seu aplicativo continua a funcionar bem sem a necessidade de ser recompilado de uma só vez.

Exemplo de gráfico mostrando os efeitos de atualização incremental no desempenho do Arm usando Arm64EC

A imagem anterior mostra um exemplo simplificado de uma carga de trabalho x64 totalmente emulada que leva algum tempo e que é então incrementalmente melhorada usando o Arm64EC:

  1. Começando como uma carga de trabalho x64 totalmente emulada
  2. Depois de recompilar as partes mais intensivas de CPU como Arm64EC
  3. Depois de continuar a recompilar mais módulos x64 ao longo do tempo
  4. Resultado final de um aplicativo Arm64EC totalmente nativo

Ao recompilar os módulos que levam mais tempo ou são os que mais consomem CPU de x64 para Arm64EC, você obtém o máximo de melhorias para a menor quantidade de esforço em cada etapa.

Dependências do aplicativo

Quando utilizar o Arm64EC para reconstruir uma aplicação, utilize versões Arm64EC das dependências, mas também pode recorrer a versões x64 das dependências. Não é possível usar versões Arm64 das dependências.

Qualquer código x64, incluindo código de dependências, em um processo Arm64EC é executado sob emulação em seu aplicativo. Priorize as dependências mais intensivas de CPU para fazer a transição de x64 para Arm64EC para melhorar o desempenho do seu aplicativo.

Identificando binários e aplicativos Arm64EC

Os aplicativos executados no Windows 11 no Arm interagem com binários Arm64EC como se fossem binários x64. O aplicativo não precisa saber até que ponto o código no binário é recompilado como Arm64EC. 

Para identificar esses binários, você pode vê-los em um prompt de comando do desenvolvedor usando link /dump /headers.

File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
    8664 machine (x64) (ARM64X)

A combinação de (x64) e (ARM64X) indica que alguma parte do binário é recompilado como Arm64EC, mesmo que o binário ainda pareça ser x64. Um binário com um cabeçalho de máquina que contém (ARM64) e (ARM64X) é um arquivo Arm64X PE que pode ser carregado em aplicativos x64 e Arm64.

Você também pode usar o Gerenciador de Tarefas do Windows para identificar se um aplicativo é compilado como Arm64EC. Na guia Detalhes do Gerenciador de tarefas, a coluna Arquitetura mostra ARM64 (compatível com x64) para aplicativos cujo executável principal é parcial ou completamente compilado como Arm64EC.

Captura de ecrã do Gestor de Tarefas a mostrar ARM64 (compatível com x64) em Detalhes da arquitetura.

Próximos passos

Consulte Introdução ao Arm64EC para saber como criar ou atualizar aplicativos Win32 usando o Arm64EC.