找出Numpy是否使用了哪个BLAS库

Apo*_*ose 19 c++ python macos numpy blas

我在不同的环境中使用numpy和scipy(MacOS,Ubuntu,RedHat).通常我使用可用的包管理器安装numpy(例如,mac ports,apt,yum).

但是,如果您不手动编译Numpy,您如何确定它使用BLAS库?使用mac端口,ATLAS作为依赖项安装.但是,我不确定它是否真的被使用过.当我执行一个简单的基准测试时,该numpy.dot()函数需要大约.2倍于使用Eigen C++库计算的点积的时间.我不确定这是否是一个合理的结果..

最好的问候,Apo

ali*_*i_m 30

numpy.show_config()并不总是提供可靠的信息.例如,如果我apt-get install python-numpy在Ubuntu 14.04上,输出np.show_config()如下所示:

blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
  NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
...
Run Code Online (Sandbox Code Playgroud)

看起来numpy正在使用标准的CBLAS库.但是,我知道numpy正在使用OpenBLAS,我通过libopenblas-dev包安装.


检查*nix最明确的方法是使用ldd在运行时找出哪些共享库numpy链接(我没有Mac,但我认为你可以otool -L代替ldd).


看看我安装的numpy版本apt-get:

~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so 
    linux-vdso.so.1 =>  (0x00007fff12db8000)
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000)
Run Code Online (Sandbox Code Playgroud)

/usr/lib/libblas.so.3实际上是一系列符号链接的开始.如果我使用它们来跟踪它们的最终目标readlink -e,我会看到它们指向我的OpenBLAS共享库:

~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3
Run Code Online (Sandbox Code Playgroud)

  • 看起来在 numpy 1.16 中,多数组被重新组织了。我必须运行“ldd numpy/core/_multiarray_umath.cpython-36m-x86_64-linux-gnu.so” (9认同)

Jor*_*gen 6

numpy.show_config() 只是告诉我的信息在我的 Debian Linux 上不可用。

然而 /usr/lib/python3/dist-packages/scipy/lib 有一个 blas 子目录,它可能会告诉你你想要什么。子目录 test 中有几个 BLAS 测试程序。

希望这可以帮助。