BLAS 和 LAPACK#
BLAS 和 LAPACK 選擇的預設行為#
當調用 NumPy 建置時,BLAS 和 LAPACK 函式庫偵測會自動發生。建置系統將嘗試找到合適的函式庫,並按照效能從高到低的順序嘗試一些已知的函式庫。典型的順序是:MKL、Accelerate、OpenBLAS、FlexiBLAS、BLIS、純 libblas
/liblapack
。這可能因平台或版本而異。該順序以及嘗試哪些函式庫可以通過 blas-order
和 lapack-order
建置選項來更改,例如
$ python -m pip install . -Csetup-args=-Dblas-order=openblas,mkl,blis -Csetup-args=-Dlapack-order=openblas,mkl,lapack
將使用找到的第一個合適的函式庫。如果沒有找到合適的函式庫,NumPy 建置將印出警告,然後使用(慢速!)NumPy 內部後備常式。為了禁止使用這些慢速常式,可以使用 allow-noblas
建置選項
$ python -m pip install . -Csetup-args=-Dallow-noblas=false
預設情況下,將使用 BLAS 和 LAPACK 的 LP64 (32 位元整數) 介面。對於針對 ILP64 (64 位元整數) 介面進行建置,必須使用 use-ilp64
建置選項
$ python -m pip install . -Csetup-args=-Duse-ilp64=true
選擇特定的 BLAS 和 LAPACK 函式庫#
blas
和 lapack
建置選項預設設定為 “auto”,這表示嘗試所有已知的函式庫。如果您想使用特定的函式庫,您可以將這些建置選項設定為函式庫名稱(通常是 pkg-config
預期的的小寫名稱)。例如,要選擇純 libblas
和 liblapack
(這通常是 Linux 發行版上的 Netlib BLAS/LAPACK,並且可以在 conda-forge 上動態切換實作),請使用
$ # for a development build
$ spin build -C-Dblas=blas -C-Dlapack=lapack
$ # to build and install a wheel
$ python -m build -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
$ pip install dist/numpy*.whl
$ # Or, with pip>=23.1, this works too:
$ python -m pip install . -Csetup-args=-Dblas=blas -Csetup-args=-Dlapack=lapack
其他應該可行的選項(只要它們安裝了 pkg-config
支援;否則它們可能仍然被偵測到,但事情本質上更脆弱)包括 openblas
、mkl
、accelerate
、atlas
和 blis
。
使用 pkg-config 偵測非標準位置的函式庫#
在底層,BLAS 和 LAPACK 偵測的工作方式是 Meson 首先嘗試使用 pkg-config
,然後使用 CMake 來發現指定的函式庫。如果您只有一個獨立的共享函式庫檔案(例如,/a/random/path/lib/
中的 armpl_lp64.so
和 /a/random/path/include/
中的對應標頭檔),那麼您必須做的是製作自己的 pkg-config 檔案。它應該具有匹配的名稱(因此在本例中為 armpl_lp64.pc
),並且可以位於任何位置。PKG_CONFIG_PATH
環境變數應設定為指向 .pc
檔案的位置。該檔案的內容應為
libdir=/path/to/library-dir # e.g., /a/random/path/lib
includedir=/path/to/include-dir # e.g., /a/random/path/include
version=1.2.3 # set to actual version
extralib=-lm -lpthread -lgfortran # if needed, the flags to link in dependencies
Name: armpl_lp64
Description: ArmPL - Arm Performance Libraries
Version: ${version}
Libs: -L${libdir} -larmpl_lp64 # linker flags
Libs.private: ${extralib}
Cflags: -I${includedir}
要檢查這是否按預期工作,您應該能夠運行
$ pkg-config --libs armpl_lp64
-L/path/to/library-dir -larmpl_lp64
$ pkg-config --cflags armpl_lp64
-I/path/to/include-dir