圖片來源: 

Pexels

Google開源了一個稱為cpu_features的函式庫,讓開發者可以在軟體執行期間(Runtime),即時查詢CPU提供的功能。

程式碼只寫一次,到處都可以執行(Write Once, Run Anywhere)是Java的保證,也是開發者的夢想,但現實並沒有想像中美好。Google指出,不少開發者開發的應用需要擠出電腦每一分效能,需要深度了解硬體所提供的功能,為不同的硬體調校程式碼。

Google編譯研究團隊Guillaume Chatelet表示,解碼器跟處理張量函式庫都是效能至關重要的應用,使用不同的指令都會造成戲劇性的效能變化,像是x86架構微處理器上的指令集積和熔加運算(Fused-Multiply-Add,FMA),或是SSE2與AVX都能大幅加快關鍵程式碼的執行速度。

Guillaume Chatelet說,但是沒有方法先知道CPU提供什麼指令集,查詢CPU製造商並不足夠,像是英特爾的Haswell架構處理器支援AVX2指令集,但是Sandy Bridge架構的處理器卻沒有。為此有些開發者採取最不得已的方法,像是讀取/proc/cpuinfo以辨識CPU,寫死程式碼以對應CPU的指令集。

而cpu_features是一個小型的開源函式庫,可以在執行期間(Runtime)回報CPU的功能,為了維持最大的可移植性以C89編寫,不使用記憶體且能在沙盒環境執行。現在這個函式庫支援x86、ARM/AArch64以及MIPS處理器,之後會依需求支援其他平臺。


Advertisement

更多 iThome相關內容