CPU/SIMD 優化#

NumPy 配備了彈性的運作機制,使其能夠利用 CPU 擁有的 SIMD 功能,以便在所有常見平台上提供更快、更穩定的效能。目前,NumPy 支援 X86、IBM/Power、ARM7 和 ARM8 架構。

NumPy 中的優化過程分為三個層次

  • 程式碼是使用通用內建函數編寫的,這是一組型別、巨集和函數,它們透過保護機制對應到每個支援的指令集,以確保只有在編譯器識別它們時才啟用使用。這允許我們為相同的功能產生多個核心,其中每個產生的核心代表一組與一個或多個特定 CPU 功能相關的指令。第一個核心代表最小(基準)CPU 功能,而其他核心代表額外(調度)的 CPU 功能。

  • 編譯時,CPU 建置選項用於定義要支援的最小和額外功能,這基於使用者選擇和編譯器支援。適當的內建函數會覆蓋平台/架構內建函數,並編譯多個核心。

  • 執行階段匯入時,會探測 CPU 以取得支援的 CPU 功能集。一種機制用於獲取最合適核心的指標,而這將是呼叫該函數的核心。

注意

NumPy 社群在實作這項工作之前進行了深入的討論,請查看 NEP-38 以獲得更詳細的說明。