当前位置: 首页 > 面试题库 >

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

程博学
2023-03-14
问题内容

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

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

最好的问候,Apo


问题答案:

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)]
...

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

检查*
nix的最明确方法是ldd在运行时查找numpy链接所针对的共享库(我没有Mac,但我认为可以otool -L代替ldd)。

  • 对于低于v1.10的numpy版本:
    ~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so
    

如果_dotblas.so不存在,则可能意味着numpy最初编译时numpy无法检测到任何BLAS库,在这种情况下,它根本不构建任何依赖于BLAS的组件。

  • 对于numpy v1.10及更高版本:

_dotblas.so已被删除,但您可以multiarray.so改为检查其依赖项:

    ~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so

查看我通过apt-get以下方式安装的numpy版本:

~$ 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实际上是符号链接链的开始。如果使用跟随他们达到最终目标readlink -e,我会看到他们指向我的OpenBLAS共享库:

~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3


 类似资料:
  • 问题内容: 我需要找出矩阵是否为正定。我的矩阵是numpy矩阵。我期望在numpy库中找到任何相关方法,但没有成功。感谢您的帮助。 问题答案: 您还可以检查矩阵的所有特征值是否为正,如果是,则矩阵为正定:

  • 我不记得我的Android应用程序使用了哪个密钥库文件。有什么方法可以找到吗? 或者我可以搜索硬盘上的所有密钥库文件吗?问题是文件没有扩展名。

  • 问题内容: 我需要从该站点下载哪个tar? 我已经尝试过fortrans,但是一直出现此错误(明显地设置了环境变量之后)。 问题答案: 该SciPy的网页用来提供构建和安装说明,但说明现在依靠操作系统二进制分发。要在没有预编译所需库软件包的操作系统上构建SciPy(和NumPy),必须先构建然后静态链接到Fortran库BLAS和LAPACK: 仅执行五个g77 / gfortran / ifor

  • 我使用的是slf4j,它是日志记录,但它并没有像预期的那样使用logback(因为logback(-test)中发生了变化)。xml不会影响日志记录行为。 此外,我删除了对任何日志库的所有间接引用(常见 谢啦!

  • 在Transform函数中编写NodeJS Transform stream时,我如何知道该块是最后一块还是没有任何新块出现。 所以我需要知道何时进入Stream的块结束,对由所有块组成的缓冲区进行一些处理,然后从流中推送处理过的数据。

  • 我有一个二维数组(矩阵),尺寸为50x50。在这些矩阵中,每个位置的值为 0 或 1。此矩阵由具有 50x50 按钮的网格布局呈现,如果值为 0 或 1,则这些按钮为白色或黑色。如果我按下一个按钮,矩阵中的相关位置应该将值更改为1。为了实现这一点,我为每个矩阵位置创建了一个按钮的网格,由for循环执行。我还为此 for 循环中的每个按钮实现了一个 ActionListener。我尝试使用 Acti