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

时间:2016-05-12 10:44:53

标签: python c++ macos numpy blas

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

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

祝你好运, APO

3 个答案:

答案 0 :(得分:28)

numpy.show_config()并不总能提供可靠的信息。例如,如果我在Ubuntu 14.04上apt-get install python-numpy,则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)]
...

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

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

  • 对于早于v1.10的numpy版本:

    ldd

    如果~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so 不存在,这可能意味着numpy在最初编译时未能检测到任何BLAS库,在这种情况下它根本不构建任何BLAS依赖库组件。

  • 适用于numpy v1.10及更新版本:

    _dotblas.so has been removed,但您可以检查_dotblas.so的依赖关系:

    multiarray.so

查看我通过~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so 安装的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) 实际上是一系列符号链接的开始。如果我使用/usr/lib/libblas.so.3将它们跟踪到最终目标,我会看到它们指向我的OpenBLAS共享库:

readlink -e

答案 1 :(得分:3)

numpy.show_config()只是告诉我的Debian Linux上没有这些信息。

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

希望这有帮助。

答案 2 :(得分:2)

您想检查numpy.show_config()以查看已配置的库。