Arm64EC - 在 Arm 上建置和移植原生效能的應用程式
Arm64EC (“模擬兼容”) 可讓您建置新的原生應用程式,或以累加方式轉換現有的 x64 應用程式,以利用使用 Arm 供電裝置的原生速度和效能,包括更佳的耗電量、電池使用時間,以及加速的 AI 和 ML 工作負載。
Arm64EC 是新應用程式二進位介面 (ABI),適用於使用 Windows 11 在 Arm 裝置上執行的應用程式。 這是需要使用 Windows 11 SDK 的 Windows 11 功能,且無法在 Arm 上的 Windows 10 上使用。
建置為 Arm64EC 的程式碼可與在相同處理序中模擬下執行的 x64 程式碼互通。 處理序中的 Arm64EC 程式碼會以原生效能執行,而任何 x64 程式碼都會使用搭配內建 Windows 11 的模擬功能執行。 即使應用程式依賴尚未支援 Arm 的現有相依性或外掛程式,您仍可開始將應用程式的元件重建為 Arm64EC,以獲益於原生效能的優點。
Arm64EC 遵循下列 x64 軟體慣例,保證與 x64 的互通性,包括呼叫慣例、堆疊使用方式、資料結構配置和前置處理器定義。 不過,Arm64EC 程式碼與建置為 Arm64 的程式碼不相容,後者使用一組不同的軟體慣例。
Arm 作業系統本身的 Windows 11 高度依賴 Arm64EC 的互通性,以啟用執行 x64 應用程式。 在 Arm 上的 Windows 11 上執行的 x64 應用程式載入的大部分作業系統程式碼,都會編譯為 Arm64EC,以啟用該程式碼的原生效能,而不需要應用程式知道。
x64 或 Arm64EC 處理序可以載入並呼叫 x64 和 Arm64EC 二進位檔,而 Arm64 處理序只能載入 Arm64 二進位檔。 這兩種架構都可以載入 Arm64X二進位檔,因為這些二進位檔同時包含 x64 和 Arm64 的程式碼。
處理架構 | x64 二進位 | Arm64EC 二進位 | Arm64 二進位 |
---|---|---|---|
x64/Arm64EC | ✔ | ✔ | ❌ |
Arm64 | ❌ | ❌ | ✔ |
✔ = 支援,❌ = 不支援
同樣的,在建置時,Arm64EC 二進位檔可以在 x64 和 Arm64EC libs 中連結,而 Arm64 二進位檔只能在 Arm64 lib 中連結。
PE 架構 | x64 lib | Arm64EC lib | Arm64 lib |
---|---|---|---|
Arm64EC | ✔ | ✔ | ❌ |
Arm64 | ❌ | ❌ | ✔ |
✔ = 支援,❌ = 不支援
如需有關 Arm64EC ABI 如何啟用互通性的詳細資訊,請參閱了解 Arm64EC ABI 和組件程式碼。
Arm64EC 可讓您以增量方式將現有應用程式中的程式碼從模擬轉換為原生。 在過程中的每個步驟中,您的應用程式能持續順利執行,不需要一次全部重新編譯。
上圖顯示完整模擬 x64 工作負載的簡化範例需要一些時間,之後可使用 Arm64EC 以增量方式改善:
- 以完全模擬的 x64 工作負載開始|
- 重新編譯最耗 CPU 的部分以當作 Arm64EC 之後
- 一段時間後繼續重新編譯更多 x64 模組
- 完全原生 Arm64EC 應用程式的最終結果
藉由重新編譯需要最多時間或從 x64 到 Arm64EC 最耗用 CPU 的模組,產生的工作負載會以最少的耗用獲得最大改善。
使用 Arm64EC 重建應用程式時,您會想要使用 Arm64EC 版本的相依性,但也可以依靠 x64 版本的相依性。 Arm64 版本的相依性將無法使用。
Arm64EC 程式中的任何 x64 程式碼,包括相依性的程式碼,都會在應用程式中的模擬下執行。 將最耗用 CPU 的相依性優先順序從 x64 轉換至 Arm64EC,會對改善應用程式效能產生最大影響。
在 Arm 上的 Windows 11 上執行的應用程式,會與 Arm64EC 二進位檔互動,就像是 x64 二進位檔一樣。 應用程式不需要知道二進位檔中的程式碼已重新編譯到何種 Arm64EC 程度。
對於有興趣識別這些二進位檔的開發人員,您可以使用 link /dump /headers
以在開發人員命令提示字元中查看檔案。
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64) (ARM64X)
(x64) 和 (ARM64X) 的組合表示,即使二進位檔仍顯示為 x64EC,該二進位檔的某些部分仍會重新編譯為 x64。 具有包含 (ARM64) 和 (ARM64X) 之電腦標頭的二進位檔,是可以載入至 x64 和 Arm64 應用程式的 Arm64X PE 檔案。
Windows 工作管理器 也可以用來識別應用程式是否已編譯為 Arm64EC。 在工作管理員的 [詳細資料] 索引標籤中,[架構] 資料行會顯示 ARM64 (x64 相容) 給主要可執行檔部分或完全編譯為 Arm64EC 的應用程式。
請參閱開始使用 Arm64EC,了解如何使用 Arm64EC 建置或更新 Win32 應用程式。