Udostępnij przez


Arm64EC — kompilowanie i przenoszenie aplikacji na potrzeby natywnej wydajności na platformie Arm

Arm64EC ("Zgodne z emulacją") umożliwia tworzenie nowych aplikacji natywnych lub stopniowe przenoszenie istniejących aplikacji x64 w celu korzystania z natywnej szybkości i wydajności urządzeń zasilanych przez architekturę Arm, w tym lepszego zużycia energii i dłuższej żywotności baterii oraz przyspieszonych procesów związanych ze sztuczną inteligencją i uczeniem maszynowym.

Arm64EC to nowy interfejs binarny aplikacji (ABI) dla aplikacji działających na urządzeniach arm z systemem Windows 11. Jest to funkcja systemu Windows 11, która wymaga użycia zestawu Windows 11 SDK i nie jest dostępna w systemie Windows 10 w usłudze Arm.

Współdziałanie

Kod utworzony jako arm64EC współdziała z kodem x64 działającym w ramach emulacji w ramach tego samego procesu. Kod Arm64EC w procesie działa z natywną wydajnością, podczas gdy dowolny kod x64 jest uruchamiany przy użyciu emulacji wbudowanej w system Windows 11. Nawet jeśli aplikacja korzysta z istniejących zależności lub wtyczek, które nie obsługują jeszcze usługi Arm, możesz zacząć kompilować części aplikacji jako arm64EC, aby uzyskać korzyści wynikające z wydajności natywnej.

Arm64EC gwarantuje współdziałanie z architekturą x64 dzięki zastosowaniu konwencji oprogramowania x64, w tym konwencji wywoływania, sposobu korzystania ze stosu, układu struktury danych i zakresu definicji preprocesora. Jednak kod Arm64EC nie jest zgodny z kodem utworzonym jako Arm64, który używa innego zestawu konwencji oprogramowania.

System operacyjny Windows 11 na Arm opiera się w dużej mierze na współdziałaniu Arm64EC, co umożliwia uruchamianie aplikacji x64. Większość kodu systemu operacyjnego załadowanego przez aplikację x64 działającą w systemie Windows 11 w usłudze Arm jest kompilowana jako Arm64EC, umożliwiając natywną wydajność tego kodu bez znajomości aplikacji.

Proces x64 lub Arm64EC może ładować i wywoływać zarówno pliki binarne x64, jak i Arm64EC, natomiast proces arm64 może ładować tylko pliki binarne Arm64. Obie architektury mogą ładować pliki binarne Arm64X , ponieważ zawierają one kod dla architektury x64 i Arm64.

Architektura procesu Plik binarny x64 Arm64EC binarne Binarne arm64
x64/Arm64EC Supported Supported Niewspierane
Arm64 Niewspierane Niewspierane Supported

Podobnie w czasie kompilacji pliki binarne Arm64EC mogą łączyć się zarówno w bibliotekach x64, jak i Arm64EC, podczas gdy pliki binarne Arm64 mogą łączyć się tylko w bibliotekach Arm64.

Architektura PE biblioteka x64 Biblioteka Arm64EC Biblioteka Arm64
Arm64EC Supported Supported Niewspierane
Arm64 Niewspierane Niewspierane Supported

Aby uzyskać więcej informacji na temat sposobu współdziałania usługi Arm64EC ABI, zobacz Understanding Arm64EC ABI and assembly code (Opis architektury Arm64EC ABI i kodu zestawu).

Użycie Arm64EC do przyspieszenia istniejącej aplikacji w systemie Windows 11 na architekturze Arm

Usługa Arm64EC umożliwia przyrostowe przenoszenie kodu w istniejącej aplikacji z emulowanej na natywną. Na każdym etapie po drodze, aplikacja nadal działa dobrze bez konieczności ponownego kompilowania wszystkiego na raz.

Przykładowy wykres przedstawiający wpływ aktualizacji przyrostowej na wydajność usługi Arm przy użyciu usługi Arm64EC

Na powyższym obrazie przedstawiono uproszczony przykład w pełni emulowanego obciążenia x64, które zajmuje trochę czasu, a następnie przyrostowo ulepszone przy użyciu usługi Arm64EC:

  1. Uruchamianie jako w pełni emulowane obciążenie x64
  2. Po ponownym skompilowaniu części najbardziej obciążających procesor jako Arm64EC
  3. Po dalszym kontynuowaniu ponownego kompilowania kolejnych modułów x64 na przestrzeni czasu
  4. Ostateczny rezultat w pełni natywnej aplikacji Arm64EC

Dzięki ponownemu skompilowaniu modułów, które zajmują najwięcej czasu lub są najbardziej intensywnie obciążające procesory z x64 do Arm64EC, uzyskujesz największą poprawę dla najmniejszej ilości nakładu pracy na każdym kroku.

Zależności aplikacji

Jeśli używasz usługi Arm64EC do ponownego kompilowania aplikacji, użyj wersji arm64EC zależności, ale można również polegać na wersjach x64 zależności. Nie można używać zależności w wersji Arm64.

Dowolny kod x64, w tym kod z zależności, w procesie Arm64EC jest uruchamiany w ramach emulacji w aplikacji. Nadawaj priorytet tym zależnościom, które najbardziej obciążają procesor, aby przejść z x64 do ARM64EC i poprawić wydajność aplikacji.

Identyfikowanie plików binarnych i aplikacji Arm64EC

Aplikacje działające w systemie Windows 11 w usłudze Arm współdziałają z plikami binarnymi Arm64EC, tak jakby były plikami binarnymi x64. Aplikacja nie musi wiedzieć, w jakim zakresie kod w pliku binarnym jest ponownie skompilowany jako Arm64EC. 

Aby zidentyfikować te pliki binarne, można je wyświetlić w wierszu polecenia dewelopera przy użyciu polecenia .link /dump /headers

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

Kombinacja (x64) i (ARM64X) wskazuje, że część pliku binarnego jest ponownie skompilowana jako Arm64EC, mimo że plik binarny nadal wydaje się być x64. Plik binarny z nagłówkiem maszyny, który zawiera (ARM64) i (ARM64X), jest plikem PE ARM64X, który można załadować do aplikacji x64 i Arm64.

Menedżer zadań systemu Windows umożliwia również określenie, czy aplikacja jest kompilowana jako Arm64EC. Na karcie Szczegóły menedżera zadań kolumna Architektura zawiera elementy ARM64 (zgodne z architekturą x64) dla aplikacji, których główny plik wykonywalny jest częściowo lub całkowicie skompilowany jako Arm64EC.

Zrzut ekranu przedstawiający Menedżera zadań z architekturą ARM64 (zgodne z architekturą x64).

Dalsze kroki

Zobacz Wprowadzenie do usługi Arm64EC , aby dowiedzieć się, jak tworzyć lub aktualizować aplikacje Win32 przy użyciu usługi Arm64EC.