13

在花费大量时间从源代码构建 ATLAS 之后,我在 OpenSUSE 13.1 存储库中发现了 libopenblas 和 libatals。我的问题是

  1. 存储库中易于安装(无需在您自己的计算机上进行调整)“libatlas”是否真的提高了计算性能?

  2. OpenBLAS 是比 ATLAS 好还是只比 Linux 存储库中易于安装的“libatlas”好?请参阅For faster R use OpenBLAS instead: better than ATLAS, trivial to switch to on Ubuntu

  3. 我关注了这篇使用 OpenBLAS 编译 Numpy 的帖子,但找不到“numpy.core._dotblas”模块。此外,我无法同时使用 ATLAS 和 OpenBLAS 构建 Numpy。

  4. 有人可以发布一个 .py 文件或 bash 代码来比较 ATLAS 和 OpenBLAS 吗?例如。

  5. 我用自己的ATLAS构建了 Numpy-1.9,从源代码编译了OpenBLAS,并在 OpenSUSE 13.1 的存储库中安装了“libopenblaso”(OpenMP 版本)和“libopenblasp”(pthreads 版本)。如何配置链接和库,以便可以告诉 Numpy-1.9 使用 OpenBLAS 而不是 ATLAS,而无需重新构建 Numpy-1.9 包。

注意:如果您在存储库中安装“libatlas”,则 ATLAS 未针对您的计算机进行调整,并且无法提高计算性能。因此,我先构建和调整了 ATLAS,然后用我自己的 ATLAS 构建了 Numpy。之后我尝试将 OpenBLAS 链接到 Numpy 但失败了。

提前谢谢了!


感谢@Dmitry 的快速回复!但是问题没有解决...

安装

$ sudo zypper in libopenblasp0

The following NEW package is going to be installed:
  libopenblasp0 

1 new package to install.
Overall download size: 3.0 MiB. After the operation, additional 30.3 MiB will be used.
Continue? [y/n/? shows all options] (y): 
Retrieving package libopenblasp0-0.2.11-11.1.x86_64      (1/1),   3.0 MiB ( 30.3 MiB unpacked)
Retrieving: libopenblasp0-0.2.11-11.1.x86_64.rpm ...........................[done (2.1 MiB/s)]
(1/1) Installing: libopenblasp0-0.2.11-11.1 ............................................[done]

Additional rpm output:
/sbin/ldconfig: Can't link /usr/lib64//usr/local/atlas/lib/libtatlas.so to libopenblas.so.0

问:为什么会有一个有趣的双斜杠“..64//usr..”?

链接图书馆

$ /usr/sbin/update-alternatives --config libblas.so.3

  Selection    Path                               Priority   Status
------------------------------------------------------------
  0            /usr/local/atlas/lib/libtatlas.so   70        auto mode
  1            /usr/lib64/blas/libblas.so.3        50        manual mode
  2            /usr/lib64/libopenblasp.so.0        20        manual mode
  3            /usr/local/atlas/lib/libcblas.a     50        manual mode
  4            /usr/local/atlas/lib/libptcblas.a   60        manual mode
  5            /usr/local/atlas/lib/libsatlas.so   65        manual mode
* 6            /usr/local/atlas/lib/libtatlas.so   70        manual mode

问:这个配置可以吗,因为一些静态库“.a”是链接的?

注意:“libopenblasp.so.0”在“zypper in”之后自动链接,而所有“atlas”库都是由命令手动创建的:

$ /usr/sbin/update-alternatives --install /usr/lib64/blas/libblas.so.3 libblas.so.3 /usr/local/atlas/lib/libxxxx.x <Integer>
4

2 回答 2

6

您可以使用 update-alternatives 在系统 BLAS 和 LAPACK 实现之间切换。例如:

/usr/sbin/update-alternatives --config libblas.so.3

http://en.opensuse.org/openSUSE:Science_Linear_algebra_libraries

我不知道 atlas 包,但我们为 openblas 提供了多架构支持。数学内核包括所有处理器特定的优化并动态设置正确的变量。注意,openblas 库有 3 个版本:serial、pthreads 和 openmp 版本。您需要使用 pthreads 或 openmp。

于 2014-09-14T07:46:53.523 回答
0

本文展示了一些基准测试以及如何编译不同的线性代数包。在作者的情况下,显然编译自己会比默认情况下提供更好的性能,但当然是 YMMV。

引用文章并稍作修改:

链接到默认系统 cblas:

$ gcc time_dgemm.c -lcblas && ./a.out
10.997839 s

单线程优化的 [atlas] 版本获得了约 3 倍的加速:

$ gcc time_dgemm.c -L$HOME/opt/atlas/lib -lsatlas && ./a.out
3.237809 s

将相同的代码链接到我们的线程 blas 中,我得到了约 10 倍的加速:

$ gcc time_dgemm.c -L$HOME/opt/atlas/lib -ltatlas && ./a.out
1.302789 s

使用 OpenBLAS 0.2.8,我获得了比 ATLAS 更好的性能:

$ gcc time_dgemm.c -L$HOME/opt/openblas-0.2.8/lib -lopenblas && ./a.out
1.031470 s

使用(非自由)MKL,性能非常相似。但是链接线要复杂得多:

$ gcc -fopenmp -m64 -I$MKLROOT/include time_dgemm.c -L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -ldl -lpthread -lm && ./a.out
0.951390 s
于 2021-09-01T02:20:30.727 回答