Condividi tramite


Arm64EC - Costruisci e porta le applicazioni per ottenere prestazioni native su Arm

Arm64EC ("Compatibile con emulazione") consente di creare nuove app native o di eseguire la transizione incrementale di app x64 esistenti per sfruttare la velocità nativa e le prestazioni possibili con i dispositivi basati su Arm, tra cui un consumo di energia migliore, la durata della batteria e carichi di lavoro di intelligenza artificiale e Machine Learning accelerati.

Arm64EC è una nuova interfaccia binaria dell'applicazione (ABI) per le applicazioni che girano su dispositivi Arm con Windows 11. Si tratta di una funzionalità di Windows 11 che richiede l'uso di Windows 11 SDK e non è disponibile in Windows 10 su Arm.

Interoperabilità

Il codice compilato come Arm64EC interagisce con codice x64 in esecuzione nell'emulazione all'interno dello stesso processo. Il codice Arm64EC nel processo viene eseguito con prestazioni native, mentre qualsiasi codice x64 viene eseguito usando l'emulazione integrata con Windows 11. Anche se la tua applicazione si basa su dipendenze o plugin esistenti che non supportano ancora Arm, puoi iniziare a ricostruire parti della tua applicazione come Arm64EC per ottenere i vantaggi delle prestazioni native.

Arm64EC garantisce l'interoperabilità con x64 seguendo le convenzioni software x64, tra cui convenzione di chiamata, utilizzo dello stack, layout della struttura dei dati e definizioni del preprocessore. Tuttavia, il codice Arm64EC non è compatibile con il codice compilato come Arm64, che usa un set diverso di convenzioni software.

Lo stesso sistema operativo Windows 11 on Arm fa molto affidamento sull'interoperabilità di Arm64EC per consentire l'esecuzione di applicazioni x64. La maggior parte del codice del sistema operativo caricato da un'app x64 in esecuzione in Windows 11 in Arm viene compilata come Arm64EC, abilitando le prestazioni native per tale codice senza conoscere l'applicazione.

Un processo x64 o Arm64EC può caricare e chiamare sia binari x64 che Arm64EC, mentre un processo Arm64 può caricare solo binari Arm64. Entrambe le architetture possono caricare i binari di Arm64X poiché questi contengono codice sia per x64 che per Arm64.

Architettura di processo binario x64 Binario Arm64EC Binario Arm64
x64/Arm64EC Supported Supported Non supportato
Arm64 Non supportato Non supportato Supported

Allo stesso modo, al momento della compilazione, i binari Arm64EC possono collegarsi sia alle librerie x64 che a quelle Arm64EC, mentre i binari Arm64 possono collegarsi solo alle librerie Arm64.

Architettura PE lib x64 Arm64EC lib Arm64 lib
Arm64EC Supported Supported Non supportato
Arm64 Non supportato Non supportato Supported

Per maggiori dettagli su come l'ABI di Arm64EC consente l'interoperabilità, vedi Comprendere l'ABI di Arm64EC e il codice assembly.

Usa Arm64EC per rendere più veloce un'applicazione esistente su Windows 11 on Arm

Arm64EC consente di eseguire la transizione incrementale del codice nell'app esistente da emulazione a nativa. In ogni fase del percorso, la tua applicazione continua a funzionare bene senza la necessità di essere ricompilata tutta in una volta.

Grafico di esempio che mostra gli effetti di aggiornamento incrementale sulle prestazioni arm con Arm64EC

L'immagine precedente mostra un esempio semplificato di un carico di lavoro x64 completamente emulato che richiede tempo che viene quindi migliorato in modo incrementale usando Arm64EC:

  1. Avvio di un carico di lavoro x64 completamente emulato
  2. Dopo aver ricompilato le parti più impegnative per la CPU come Arm64EC
  3. Dopo aver continuato a ricompilare altri moduli x64 nel tempo
  4. Risultato finale di un'applicazione completamente nativa Arm64EC

Ricompilando i moduli che richiedono più tempo o sono il più intensivo della CPU da x64 a Arm64EC, si ottiene il miglioramento maggiore per la quantità minima di lavoro in ogni passaggio.

Dipendenze dell'app

Quando si usa Arm64EC per ricompilare un'applicazione, usare le versioni arm64EC delle dipendenze, ma è anche possibile basarsi su versioni x64 delle dipendenze. Non è possibile usare le versioni arm64 delle dipendenze.

Qualsiasi codice x64, incluso il codice dalle dipendenze, in un processo Arm64EC viene eseguito in emulazione nell'app. Classificare in ordine di priorità le dipendenze a elevato utilizzo di CPU per passare da x64 a Arm64EC per migliorare le prestazioni dell'app.

Identificare i binari e le applicazioni Arm64EC

Le app in esecuzione in Windows 11 in Arm interagiscono con i file binari arm64EC come se fossero file binari x64. L'app non deve sapere in quale misura il codice nel file binario viene ricompilato come Arm64EC. 

Per identificare questi file binari, è possibile visualizzarli in un prompt dei comandi per sviluppatori usando link /dump /headers.

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

La combinazione di (x64) e (ARM64X) indica che alcune parti del file binario vengono ricompilate come Arm64EC, anche se il file binario sembra ancora x64. Un binario con un'intestazione della macchina che contiene (ARM64) e (ARM64X) è un file PE Arm64X che può essere caricato in applicazioni x64 e Arm64.

Puoi anche usare Gestione attività di Windows per identificare se un'app viene compilata come Arm64EC. Nella scheda Dettagli di Gestione attività la colonna Architettura mostra ARM64 (compatibile con x64) per le applicazioni il cui eseguibile principale è parzialmente o completamente compilato come Arm64EC.

Screenshot di Gestione attività che mostra ARM64 (compatibile con x64) nei dettagli dell'architettura.

Passaggi successivi

Consulta Iniziare con Arm64EC per scoprire come costruire o aggiornare le applicazioni Win32 utilizzando Arm64EC.