3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
Pardiso 6 sparse solver
至少取決于 Lapack 函數(shù)sgetrf
,該函數(shù)使用帶有行交換的部分旋轉(zhuǎn)來(lái)計(jì)算一般 M×N 矩陣 A 的 LU 分解。
從我們閱讀的內(nèi)容來(lái)看,libpardiso600-GNU720-X86-64.so
它與共享的 Lapack 庫(kù)動(dòng)態(tài)鏈接。您需要提供一個(gè)包含一個(gè)實(shí)現(xiàn)的 PATH。
在啟動(dòng) Python 之前,我建議您使用LD_LIBRARY_PATH
并包含您正在使用的 BLAS/Lapack 庫(kù)的路徑。它可以是 netlib 實(shí)現(xiàn)、ATLAS 實(shí)現(xiàn)或 MKL 實(shí)現(xiàn)。
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
在這種情況下,安裝可能會(huì)直接解決問(wèn)題。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
PATH訣竅是,您需要在加載 Pardiso 庫(kù)之前在 Python 腳本中顯式加載依賴項(xiàng),即lapack,blas和,而不是將依賴項(xiàng)的位置添加到 system 。gfortran此外,您必須將可選mode=ctypes.RLTD_GLOBAL參數(shù)顯式傳遞給ctypes.CDLL方法,以使依賴項(xiàng)全局可訪問(wèn),因此 Pardiso 可以訪問(wèn)它們。
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)
以我的經(jīng)驗(yàn),如果您在已安裝的conda環(huán)境中mkl,您只需將其gfortran列為依賴項(xiàng),其余的將自動(dòng)加載和訪問(wèn),在這種情況下 set shared_libs = ["gfortran"].

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
Pardiso 6 和 Intel MKL Pardiso 不兼容,因?yàn)樗鼈兙哂胁煌?API。您可以嘗試從系統(tǒng)路徑中刪除 MKL,添加 OpenBLAS,然后再次嘗試鏈接您的示例。
添加回答
舉報(bào)