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,然后再次尝试链接您的示例。
添加回答
举报