3 回答

TA貢獻1851條經驗 獲得超3個贊
Pardiso 6 sparse solver
至少取決于 Lapack 函數sgetrf
,該函數使用帶有行交換的部分旋轉來計算一般 M×N 矩陣 A 的 LU 分解。
從我們閱讀的內容來看,libpardiso600-GNU720-X86-64.so
它與共享的 Lapack 庫動態鏈接。您需要提供一個包含一個實現的 PATH。
在啟動 Python 之前,我建議您使用LD_LIBRARY_PATH
并包含您正在使用的 BLAS/Lapack 庫的路徑。它可以是 netlib 實現、ATLAS 實現或 MKL 實現。
LD_LIRARY_PATH=$LD_LIRARY_PATH:/my_path_to_lapack \python -c"import ctypes; pardiso = ctypes.CDLL(pardiso_so_address)"
如果你使用conda
,你可以用命令安裝
conda install -c anaconda mkl
在這種情況下,安裝可能會直接解決問題。

TA貢獻1895條經驗 獲得超7個贊
PATH訣竅是,您需要在加載 Pardiso 庫之前在 Python 腳本中顯式加載依賴項,即lapack,blas和,而不是將依賴項的位置添加到 system 。gfortran此外,您必須將可選mode=ctypes.RLTD_GLOBAL參數顯式傳遞給ctypes.CDLL方法,以使依賴項全局可訪問,因此 Pardiso 可以訪問它們。
import ctypes
import ctypes.util
shared_libs = ["lapack", "blas", "omp", "gfortran"]
for lib in shared_libs:
# Fetch the proper name of the dependency
libname = ctypes.util.find_library(lib)
# Load the dependency and make it globally accessible
ctypes.CDLL(libname, mode=ctypes.RTLD_GLOBAL)
# Finally, load the Pardiso library
pardiso = ctypes.CDLL(pardiso_so_address)
以我的經驗,如果您在已安裝的conda環境中mkl,您只需將其gfortran列為依賴項,其余的將自動加載和訪問,在這種情況下 set shared_libs = ["gfortran"].

TA貢獻1794條經驗 獲得超8個贊
Pardiso 6 和 Intel MKL Pardiso 不兼容,因為它們具有不同的 API。您可以嘗試從系統路徑中刪除 MKL,添加 OpenBLAS,然后再次嘗試鏈接您的示例。
添加回答
舉報