PyPy官方宣布其JIT編譯器開始正式支援64位元ARM(AArch64),現在PyPy支援的架構種類越來越豐富,在x86架構支援32和64位元,而ARM上也完整支援了32和64位元,還有PPC64和s390x總共6種架構。

PyPy是標準Python實作CPython的替代實作,相較於CPython的直譯器,PyPy則採用JIT編譯器,因此在大部分的情況下,PyPy執行效率比CPython還要好上許多,PyPy官方提到,一直以來他們為現有平臺提供良好的Python程式執行效能,他們比較了AArch64、x86_64與CPython的效能表現。

官方使用比較了PyPy AArch64與CPython 2.7.15版本效能差異,以及AArch64  x86_64和CPython 2.7.16在Linux筆電上的效能差異比較,在大多數基準測試中,AArch64的加速表現,與他們在x86_64筆電上獲得的加速程度相當,和CPython相比,PyPy在AArch64上的速度提升幅度在0.6到44.9倍之間,而x86_64的的加速區間則是在0.6和58.9倍間。

官方也單獨比較了PyPy AArch64以及x86_64之間的差異,兩者的速度差異可以分為,兩者執行速度差不多、AArch64執行速度為x86_64的2倍,還有AArch64執行速度是x86_64的0.5倍共三類。官方提到造成效能差異的原因,主要來自於架構的差異。

這個基準測試是在AWS上的Graviton A1機器上進行實驗,官方表示,由於Graviton A1是虛擬機器,實際上並不適合基準測試,主要問題在於,雖然虛擬CPU與真實CPU是一對一,但是從外部無法清楚知道跨虛擬CPU共享快取的方式。

而且官方發現,Graviton A1虛擬機器的分支預測器似乎有所改進,CPython本身程式執行的速度就快很多,因此雖然在舊版ARM開發板上PyPy比CPython快不少,但在Graviton A1虛擬機器測試的結果,差異就沒這麼大了。

官方認為,這樣的結果也顯示,PyPy還有許多改進的可能性,尤其是在AArch64平臺,因為AArch64架構帶有大量的CPU暫存器,而由於PyPy的後端是用x86的想法開發,而x86的CPU暫存器數量很少,在未來他們會改進PyPy以符合更現代的硬體架構,另外,AArch64的後端還缺少許多功能,這些功能部分暫時以計算成本高昂的函式呼叫實作,未來會以內聯原生指令改進。


Advertisement

更多 iThome相關內容