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 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 funzione di Windows 11 che richiede l'utilizzo dell'SDK di Windows 11 e non è disponibile su Windows 10 on Arm.

Interoperabilità

Il codice costruito come Arm64EC è interoperabile con il codice x64 in esecuzione in emulazione all'interno dello stesso processo. Il codice Arm64EC nel processo viene eseguito con prestazioni native, mentre tutto il codice x64 viene eseguito utilizzando l'emulazione integrata in 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 le convenzioni di chiamata, l'uso dello stack, la disposizione delle strutture dati e le definizioni dei preprocessori. Tuttavia, il codice Arm64EC non è compatibile con il codice costruito come Arm64, che utilizza una serie di convenzioni software diverse.

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'applicazione x64 in esecuzione su Windows 11 on Arm sarà stato compilato come Arm64EC, consentendo prestazioni native per quel codice senza che l'applicazione lo sappia.

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
Arm64

✔ = Supportato, ❌ = Non supportato

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 x64 lib Arm64EC lib Arm64 lib
Arm64EC
Arm64

✔ = Supportato, ❌ = Non supportato

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 ti permette di passare in modo incrementale il codice della tua applicazione esistente da emulato a nativo. 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 qui sopra mostra un esempio semplificato di un carico di lavoro x64 completamente emulato che richiede una certa quantità di tempo e che viene poi migliorato in modo incrementale utilizzando 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 da x64 ad Arm64EC i moduli che richiedono più tempo o che sono più impegnativi per la CPU, il carico di lavoro risultante riceve il massimo miglioramento con il minimo sforzo in ogni fase del processo.

Dipendenze dell'app

Quando usi Arm64EC per ricostruire un'applicazione, vorrai utilizzare le versioni Arm64EC delle dipendenze, ma puoi anche affidarti alle versioni x64 delle dipendenze. Le versioni Arm64 delle dipendenze non saranno utilizzabili.

Qualsiasi codice x64, compreso quello delle dipendenze, in un processo Arm64EC verrà eseguito in emulazione nella tua applicazione. Dare priorità alle dipendenze più impegnative per la CPU per passare da x64 ad Arm64EC avrà il massimo impatto sul miglioramento delle prestazioni della tua applicazione.

Identificare i binari e le applicazioni Arm64EC

Le applicazioni che girano su Windows 11 su Arm interagiranno con i binari Arm64EC come se fossero binari x64. L'applicazione non ha bisogno di sapere fino a che punto il codice del binario è stato ricompilato come Arm64EC. 

Per gli sviluppatori interessati a identificare questi binari, è possibile vederli in un prompt dei comandi per sviluppatori utilizzando link /dump /headers.

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

La combinazione di (x64) e (ARM64X) indica che una parte del binario è stata ricompilata come Arm64EC, anche se il binario appare ancora come 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.

Windows Task Manager può essere utilizzato anche per identificare se un'applicazione è stata compilata come Arm64EC. Nella scheda Dettagli del Task manager, la colonna Architettura mostrerà ARM64 (compatibile con x64) per le applicazioni il cui eseguibile principale è stato 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.