Sdílet prostřednictvím


Arm64EC – Sestavování a portování aplikací pro nativní výkon v Arm

Arm64EC ("Emulation Compatible") umožňuje vytvářet nové nativní aplikace nebo postupně převádět stávající aplikace x64, abyste mohli využívat nativní rychlost a výkon u zařízení s armem, včetně lepší spotřeby energie, výdrže baterie a zrychlených úloh umělé inteligence a ML.

Arm64EC je nové binární rozhraní aplikace (ABI) pro aplikace běžící na zařízeních Arm s Windows 11. Jedná se o funkci Windows 11, která vyžaduje použití sady Windows 11 SDK a není dostupná ve Windows 10 na Arm.

Interoperability

Kód vytvořený jako Arm64EC spolupracuje s kódem x64 spuštěným pod emulací ve stejném procesu. Kód Arm64EC v procesu běží s nativním výkonem, zatímco jakýkoli kód x64 běží pomocí emulace, která je součástí Windows 11. I když vaše aplikace spoléhá na existující závislosti nebo moduly plug-in, které ještě Arm nepodporují, můžete začít znovu vytvářet části aplikace jako Arm64EC, abyste získali výhody nativního výkonu.

Arm64EC zaručuje interoperabilitu s x64 podle softwarových konvencí x64, včetně konvence volání, použití zásobníku, layoutu datových struktur a definic preprocesoru. Kód Arm64EC ale není kompatibilní s kódem vytvořeným jako Arm64, který používá jinou sadu softwarových konvencí.

Samotný operační systém Arm ve Windows 11 spoléhá na interoperabilitu Arm64EC, aby bylo možné spouštět aplikace x64. Většina kódu operačního systému načteného aplikací x64 běžící ve Windows 11 v Arm je zkompilována jako Arm64EC, což umožňuje nativní výkon pro tento kód bez znalosti aplikace.

Proces x64 nebo Arm64EC může načíst a volat binární soubory x64 i Arm64EC, zatímco proces Arm64 může načíst pouze binární soubory Arm64. Obě architektury můžou načíst binární soubory Arm64X , protože obsahují kód pro x64 i Arm64.

Architektura procesu binární soubor x64 Binární soubor Arm64EC Binární soubor Arm64
x64/Arm64EC Supported Supported Není podporováno
Arm64 Není podporováno Není podporováno Supported

Podobně v době sestavení mohou binární soubory Arm64EC propojit jak knihovny x64, tak Arm64EC, zatímco binární soubory Arm64 mohou propojit pouze knihovny Arm64.

Architektura zpracovatelského prvku x64 lib Arm64EC lib Arm64 lib
Arm64EC Supported Supported Není podporováno
Arm64 Není podporováno Není podporováno Supported

Další podrobnosti o tom, jak Arm64EC ABI umožňuje interoperabilitu, najdete v tématu Principy Arm64EC ABI a kódu sestavení.

Použití Arm64EC k urychlení stávající aplikace ve Windows 11 na Arm

Arm64EC umožňuje přírůstkově převést kód v existující aplikaci z emulované na nativní. V každém kroku vaše aplikace stále dobře funguje bez nutnosti celé najednou rekompilovat.

Příklad grafu znázorňující efekty přírůstkové aktualizace výkonu Arm pomocí Arm64EC

Předchozí obrázek ukazuje zjednodušený příklad plně emulované úlohy x64, která trvá určitou dobu, která se pak postupně vylepšuje pomocí Arm64EC:

  1. Počínaje jako plně emulovaná úloha x64
  2. Po opětovném zkompilování nejvýkonnějších částí procesoru jako Arm64EC
  3. Po pokračování v rekompilování více modulů x64 v průběhu času
  4. Výsledný stav plně nativní aplikace Arm64EC

Opětovným zkompilováním modulů, které zabírají nejvíce času nebo které jsou nejvíce náročné na procesor od x64 do Arm64EC, získáte při každém kroku co největší vylepšení.

Závislosti aplikací

Při opětovném sestavení aplikace pomocí Arm64EC použijte verze Arm64EC závislostí, ale můžete také spoléhat na verze x64 závislostí. Verze závislostí Arm64 se nedají použít.

Jakýkoli kód x64, včetně kódu ze závislostí, se v procesu Arm64EC spustí pod emulací ve vaší aplikaci. Upřednostněte nejvýkonnější závislosti procesoru, které se mají převést z x64 na Arm64EC, aby se zlepšil výkon vaší aplikace.

Identifikace binárních souborů a aplikací Arm64EC

Aplikace běžící ve Windows 11 na Arm pracují s binárními soubory Arm64EC, jako by se jedná o binární soubory x64. Aplikace nemusí vědět, do jaké míry je kód v binárním souboru rekompilován jako Arm64EC. 

Pokud chcete tyto binární soubory identifikovat, můžete je zobrazit na příkazovém řádku vývojáře pomocí link /dump /headerspříkazu .

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

Kombinace (x64) a (ARM64X) označuje, že část binárního souboru je rekompilována jako Arm64EC, i když se zdá, že binární soubor je stále x64. Binární soubor s hlavičkou počítače obsahující (ARM64) a ( ARM64X) je soubor ARM64X PE , který je možné načíst do aplikací x64 i Arm64.

Pomocí Správce úloh systému Windows můžete také zjistit, jestli je aplikace zkompilovaná jako Arm64EC. Na kartě Podrobnosti ve Správci úloh se ve sloupci Architektura zobrazuje ARM64 (kompatibilní s x64) pro aplikace, jejichž hlavní spustitelný soubor je částečně nebo zcela zkompilován jako Arm64EC.

Snímek obrazovky Správce úloh zobrazující ARM64 (kompatibilní s x64) v podrobnostech o architektuře

Další kroky

Přečtěte si článek Začínáme s Arm64EC a zjistěte, jak vytvářet nebo aktualizovat aplikace Win32 pomocí Arm64EC.