Python on Arm:2025 年更新
Python 為何對 Arm 至關重要
Python 是當今使用最廣泛的程式語言之一,為機器學習 (ML)、自動化、資料科學、DevOps、Web 開發和開發者工具等領域的應用程式提供支援。在 Arm,我們不僅將 Python 視為一種需要支援的語言,更將其視為一項戰略重點,旨在賦能廣泛且不斷壯大的開發者社群。
在過去幾年中,我們與 Python 社群緊密合作,使 Arm 成為 Python 開發的一流平臺。得益於持續的上游協作、有針對性的工程投入和生態系統投資,現在,在 Arm 上跨 Linux、Windows 和雲端開發、測試和部署 Python 工作負載已切實可行。
2024 年,我們分享了 Arm 如何增加了對 Python 生態系統的參與度。一年後,我們看到了這項投資的成果,包括新的基礎設施、改進的效能以及越來越多的真實專案在 Arm 上執行。
本文重點介紹了過去一年的關鍵發展以及未來的展望。
2025 年新增功能
更便捷的開發:適用於 Arm 的 Linux 和 Windows GitHub 託管執行器
作為我們與 GitHub 合作的一部分,Arm 協助為基於 Arm 的平臺啟用了 GitHub 託管 CI 執行器。這些執行器現已可用於:
Arm 在測試版釋出期間贊助了底層基礎設施並提供了工程支援。這些執行器為開源專案提供了一種快速、可靠的方式,可以在沒有模擬或自託管的情況下執行原生 CI 工作流。
CPython 專案是 Windows on Arm 執行器的第一個開源使用者,並持續在日常 CI 管道中使用它們。這有助於確保對該平臺的一流支援。
效能改進
Python 3.13 引入了一個實驗性的即時 (JIT) 編譯器,由 CPython 團隊開發,旨在改善實際應用中的效能。Arm 透過在 Arm 平臺上測試、調優和擴充套件 JIT,特別是針對 AArch64 架構(見下文),直接為這項工作做出了貢獻。
我們的工作包括修復特定於架構的問題、驗證生成的機器程式碼,以及提高 Arm 上 JIT 輸出的整體質量。這些努力帶來了:
- Linux 上速度提升高達 4%
- 生成的標頭檔案大小減少 17%
- 更智慧的跳轉處理和更高效的程式碼生成
- 透過跳板重用和有針對性的最佳化降低記憶體開銷
結果是,在 Arm 上執行的 Python 工作負載獲得了更快、更可靠的 JIT 體驗。
Arm 上的 Windows 生態系統支援更佳
Python 對 Arm 上的 Windows 的支援持續成熟。CPython 本身以及許多基本軟體包現在都可以在該平臺上乾淨地構建和執行。這得益於上游修復、改進的構建系統和擴充套件的 CI 覆蓋範圍。
我們正與微軟緊密合作,以提升 Arm 上的 Windows 裝置上的 Python 整體體驗。這包括:
- 實現流行庫的相容性
- 完善構建和打包工作流
- 支援關鍵的 AI 和 ML 工具
一個主要進展領域是 PyTorch,Arm 和微軟之間的合作已經提供了原生構建並改進了加速支援。
隨著 適用於 Arm 上 Windows 的 PyTorch 2.7 的釋出,開發者現在可以訪問適用於 Python 3.12 的 Arm 原生 Windows 構建。這使得 ML 工作流可以在 Arm64 Windows 裝置(包括 Copilot+ PC)上原生執行,並充分利用硬體功能。
這些改進支援廣泛的機器學習用例。從 Stable Diffusion 等生成模型,到自然語言處理,再到傳統的迴歸和分類。Arm 上的 Windows 現在是現代 AI 開發的生產就緒平臺。
Arm 對 Python 社群的承諾
我們不僅透過程式碼,還透過基礎設施、資金和時間繼續支援 Python 社群,包括:
- 在我們的劍橋辦公室舉辦 CPython 核心開發者衝刺 2025
- 贊助 2022、2023 和 2025 年的 EuroPython
- 提供與 speed.python.org 整合的專用基準測試伺服器
- 資助一名全職 CPython 開發者,現已成為核心提交者
Arm 致力於透過持續的上游貢獻和社群投資來支援 Python 生態系統。在過去一年中,我們擴大了努力,在技術和組織上支援社群。
CPython 核心開發者衝刺 2025
我們很榮幸能於今年九月在劍橋辦公室主辦並贊助即將舉行的CPython 核心開發者衝刺 2025。該活動有望成為有史以來規模最大的衝刺,將匯聚來自歐洲、美國、韓國、新加坡和澳大利亞的 55 餘名核心開發者和貢獻者。
這些衝刺對於 Python 的發展至關重要,它促進了面對面的設計討論、上游規劃和集中的開發工作,這些工作難以遠端協調。透過支援這項全球性活動,Arm 正在幫助加速 Python 的技術路線圖,同時加強我們與維護和塑造該語言的人員的合作。
支援 EuroPython
此外,Arm 第三次贊助了 EuroPython 2025,此前曾在 2022 年和 2023 年支援過該會議。這有助於促進全球維護者、貢獻者和使用者之間的協作。



Arm 在 EuroPython 2025 上發表了關於 JIT 的專題演講,題為《探索 CPython JIT》,深入探討了 Arm 平臺上 JIT 的現狀和演變。我們將分享我們在 Python 3.14 中使用新 JIT 編譯器的工作經驗。


專用 Arm 基準測試伺服器
為協助 Python 核心開發者進行效能跟蹤,Arm 現提供一個執行在 Arm 硬體上的專用基準測試伺服器,並在 speed.python.org 上釋出結果。該伺服器與 Python 的效能監控工具整合,有助於評估程式碼更改對 Arm 平臺的影響,並實現更資料驅動的最佳化。

對 CPython 的上游優先貢獻
Arm 也持續直接投資上游工作。作為這項工作的結果,我最近被提升為 CPython 核心開發者,進一步加強了我們與 Python 專案的技術合作。
在過去一年中,Arm 在直譯器的多個領域做出了貢獻,包括:
- CPython JIT 的改進
- 微操作最佳化器的改進
- 效能基準測試基礎設施的增強
- 審查拉取請求和分類問題
這些努力反映了 Arm 更廣泛的目標:不僅僅是平臺支援,更是對 Python 語言本身的持續、上游優先的貢獻。
工程貢獻
Arm 最近對 CPython 的貢獻主要集中在改進 AArch64 平臺上的 JIT 和效能。這些更改中的每一項都改進了 Arm 平臺上的 JIT 生成的機器程式碼,從而實現更高效的 Python 執行。
儘管 JIT 仍處於早期階段,但它已在特定工作負載中展現出潛力。我們的貢獻為 Arm 系統未來的加速奠定了基礎。
GH-123872:生成並修補 AArch64 跳板
此拉取請求引入了 JIT 編譯器中 AArch64 跳板的生成和修補。透過實現這些跳板,JIT 可以更有效地處理超出範圍的跳轉,從而提高 AArch64 平臺上 JIT 編譯程式碼的可靠性和效能。此補丁使 JIT 在 Linux 上速度提高 0.8%,記憶體佔用減少 0.6%。
GH-121001:用 LDR 替換 AArch64 跳板
在此前工作的基礎上,此更改將現有跳板機制替換為 AArch64 使用 LDR 指令。這種簡化降低了複雜性並增強了 JIT 程式碼生成過程的可維護性。它使生成的模板標頭檔案大小減少 17%,並使修補函式從 4 個減少到 1 個。
// Old trampoline d2800008 mov x8, #0x0 f2a00008 movk x8, #0x0, lsl #16 f2c00008 movk x8, #0x0, lsl #32 f2e00008 movk x8, #0x0, lsl #48 d61f0100 br x8 // New trampoline 58000048 ldr x8, 8 d61f0100 br x8 00000000 # Used to patch the 64-bit address 00000000 # Used to patch the 64-bit address
GH-120250:JIT:在 AArch64 上重用跳板
此增強功能使 JIT 編譯器能夠在 AArch64 上重用現有跳板,從而最大程度地減少冗餘並最佳化記憶體使用。透過重用跳板,JIT 減少了為每個超出範圍的跳轉生成新跳板的開銷。
GH-131041:僅針對長跳轉發出 AArch64 跳板
此最佳化確保僅在必要時發出跳板,特別是對於無法直接編碼的長跳轉。透過避免生成多餘的跳板,JIT 編譯器簡化了程式碼生成過程並減小了程式碼大小。
GH-131042:移除 AArch64 JIT 模板中的尾部跳轉
此改進消除了 AArch64 JIT 模板中不必要的尾部跳轉。透過移除這些冗餘指令,JIT 生成了更高效的機器程式碼,從而在執行過程中潛在地提高了效能,包括在 Linux 上提速 1.4%。
// With the trailing jump that needs to be patched 0x08, 0x00, 0x00, 0x90, // adrp x8, _JIT_OPERAND0 0x08, 0x01, 0x40, 0xf9, // ldr x8, [x8] 0x88, 0x1e, 0x00, 0xf9, // str x8, [x20, #0x38] 0x00, 0x00, 0x00, 0x14, // b _JIT_CONTINUE // The trailing jump has been replaced with a NOP 0x08, 0x00, 0x00, 0x90, // adrp x8, _JIT_OPERAND0 0x08, 0x01, 0x40, 0xf9, // ldr x8, [x8] 0x88, 0x1e, 0x00, 0xf9, // str x8, [x20, #0x38] 0x1f, 0x20, 0x03, 0xd5, // nop (branch was removed)
展望未來
Arm 與 Python 生態系統的合作將持續到 2025 年及以後。我們將繼續專注於效能、生態系統支援和上游協作。無論是透過基礎設施、開發者資助,還是對 CPython 內部的貢獻,我們的目標是讓 Arm 上的 Python 成為一個快速、穩定且易於所有使用者訪問的平臺。
我們將繼續在直譯器的關鍵領域做出貢獻,包括 JIT、SIMD 執行和核心評估迴圈。展望未來,我們計劃探索將特定於架構的指令(如 NEON、SVE、SVE2、SME 和Arm 新的 SME2)整合到 JIT 編譯器中,以加速特定工作負載。
我們還致力於透過審查補丁、指導新貢獻者和支援將維護者聚集在一起的關鍵活動來加強 Python 的社群方面。
參與進來
我們對 Arm 上 Python 的未來感到興奮,並期待您的反饋。
現在是嘗試在 Arm 上執行 Python 工作負載的最佳時機。它比以往任何時候都更容易:
- 適用於 Linux 和Arm 上的 Windows 的 GitHub 託管執行器均已可用
- 大多數 PyPI 軟體包現在可以在 Arm 系統上開箱即用
- 所有主要的公共雲都提供 Arm 例項
如果您遇到問題,請向上游提出,或直接聯絡我們。
無論您是從事 Python 本身的工作,構建工具和庫,還是將您的軟體移植到基於 Arm 的系統,我們都邀請您透過Arm 開發者計劃與我們聯絡。這是保持最新、訪問技術資源以及與 Arm 工程師和其他 Python 開發者協作的最佳方式。
讓我們一起繼續改進 Arm 上的 Python。
