Partilhar via


Ajustar as definições de emulação no Arm

Os PCs Windows em Arm suportam a execução de aplicações x86 e x64 sob emulação usando Prism. O Prism inclui muitas otimizações para garantir que a emulação seja rápida e eficaz para uma boa experiência de utilizador.

Por defeito, o Prism alcança o equilíbrio ótimo entre otimizações de desempenho e compatibilidade com aplicações. No caso pouco comum de uma aplicação apresentar problemas de compatibilidade ao correr sob Prism, o Windows disponibiliza definições opcionais de emulação que pode usar para ajustar o comportamento e as otimizações que o Prism utiliza para a aplicação. Alterar estas definições pode potencialmente aumentar a compatibilidade para uma aplicação, geralmente à custa do desempenho.

Advertência

Alterar as definições de emulação pode fazer com que a sua aplicação crashe inesperadamente ou nem sequer lance.

Definições de emulação abertas

Pode aceder às definições de emulação clicando com o botão direito no executável de uma aplicação e selecionando Propriedades.

Quando usa o Windows no Arm, o separador de Compatibilidade inclui uma secção intitulada Windows no Arm. Selecione Alterar definições de emulação para abrir uma janela de definições de emulação do Arm.

Captura de tela Alterar configurações de emulação

Restaurar o comportamento do emulador anterior

O Windows on Arm continua a melhorar e a evoluir ao longo do tempo. Se uma aplicação encontrar um problema mas funcionou numa versão anterior do Windows on Arm, substituir o comportamento do Prism para corresponder ao de uma versão anterior do Windows on Arm pode resolver o problema.

Capacidade de emulação de ocultar x64

Quando selecionas esta opção, as aplicações x86 veem que o código x64 não pode correr neste dispositivo. Esta opção imita o suporte a aplicações do emulador tal como existia no Windows 10 no Arm.

Ocultar funcionalidades mais recentes emuladas da CPU

No Windows 11 24H2 e versões posteriores, o Prism suporta funcionalidades adicionais de CPU que versões anteriores do Windows em Arm não suportavam. Estas funcionalidades incluem AVX e AVX2, bem como BMI, FMA, F16C e outras extensões de conjunto de instruções x86 relacionadas.

Quando seleciona esta opção para uma aplicação, o emulador regressa ao nível de suporte a funcionalidades de CPU que existia na versão anterior do Prism.

Para aplicações x86 de 32 bits, esta opção é substituída por uma para mostrar funcionalidades mais recentes emuladas do CPU. Por defeito, o Prism não expõe as funcionalidades do CPU mencionadas anteriormente a aplicações x86 de 32 bits. Ao selecionar esta opção, uma aplicação x86 de 32 bits pode detetar e usar o conjunto de funcionalidades atualizadas da CPU.

Definições de emulação

A janela de definições de emulação do Arm oferece duas formas de modificar as definições de emulação. Pode selecionar um grupo pré-definido de definições de emulação ou selecionar a opção Usar definições avançadas para ativar a seleção de definições individuais.

Os quatro grupos pré-definidos de definições de emulação são:

  • Predefinido
  • Seguro
  • Rigoroso
  • Muito rigoroso

Ao passar de Padrão para Seguro, de Seguro para Estrito e de Estrito para Muito Rigoroso, estabelece definições adicionais de emulação, trocando o desempenho pela potencial melhoria em compatibilidade.

Alterar captura de tela das configurações de emulação2

Se selecionar Usar definições avançadas, pode alterar a forma como a aplicação utiliza múltiplos núcleos de CPU, selecionando entre Rápido, Operação multi-core rigorosa, Muito rigoroso ou Forçar operação de núcleo único.

As definições multi-core alteram a forma como o Prism utiliza barreiras de memória para sincronizar os acessos de memória entre núcleos nas aplicações durante a emulação. Rápido é o modo padrão, que é o equilíbrio ótimo para a maioria das aplicações. As opções rigorosas e muito rigorosas aumentam o número de barreiras, atrasando a aplicação mas reduzindo o risco de erros. A opção de núcleo único remove todas as barreiras, mas obriga todos os threads da aplicação a correrem num único núcleo para evitar a necessidade de sincronização.

Captura de tela de configurações multi-core

As restantes definições de emulação são descritas nesta tabela.

Configuração de emulação Resultado
Desativar cache de aplicativos O sistema operativo armazena em cache blocos compilados de código para reduzir a sobrecarga de emulação nas execuções subsequentes. Essa configuração requer que o emulador recompile todo o código do aplicativo em tempo de execução.
Desativar o modo de execução híbrida (apenas aplicações x86) Binários Compilados Híbridos Portátiles Executáveis (CHPE) são binários compatíveis com x86 que incluem código Arm64 nativo para melhorar o desempenho, mas podem não ser compatíveis com algumas aplicações. Esta configuração desativa o uso destes binários híbridos em favor de binários puramente x86.
Proteções de emulação leves adicionais Esta configuração faz com que o Prism ignore a presença de metadados voláteis num binário.
Suporte estrito a códigos de auto-modificação Ative esta configuração para garantir que qualquer código auto-modificável é corretamente suportado na emulação. Os cenários de código de automodificação mais comuns são cobertos pelo comportamento padrão do emulador. Selecionar esta opção reduz significativamente o desempenho do código automodificável durante a execução.
Desativar a otimização do desempenho da página RWX Esta configuração desativa uma otimização que melhora o desempenho do código em páginas legíveis, graváveis e executáveis (RWX), mas pode ser incompatível com algumas aplicações.
Desativar a otimização de ponto flutuante X87 é uma extensão de conjunto de instruções x86, usada principalmente em alguns softwares antigos x86 para realizar aritmética de vírgula flutuante, que pode usar um formato de vírgula flutuante de 80 bits de maior precisão, que não é necessário para a maioria dos softwares que usam x87. Ao selecionar esta opção, o Prism utilizará toda a precisão de 80 bits em vez de uma aproximação de 64 bits, à custa do desempenho.