使用ATLAS或OpenBLAS感到麻木



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

  1. 在存储库中轻松安装(无需在自己的计算机上进行调整)"libatlas"真的能提高计算性能吗?

  2. OpenBLAS是比ATLAS更好,还是只比Linux风格的存储库中易于安装的"libatlas"更好?请参阅使用OpenBLAS获得更快的R:比ATLAS更好,在Ubuntu上切换到它很简单。

  3. 我遵循了这篇用OpenBLAS编译Numpy的文章,但找不到"Numpy.core_dotblas"模块。更重要的是,我无法同时使用ATLAS和OpenBLAS构建Numpy。

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

  5. 我用自己的ATLAS构建了Numpy-1.9,从源代码编译了OpenBLAS,并在OpenSUSE13.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

Q:这个配置好吗,因为一些静态库".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>

您可以使用更新替代方案在系统BLAS和LAPACK实现之间切换。例如:

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

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

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

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

引用来自文章的小编辑:

针对默认系统cblas:的链接

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

单线程优化[图集]版本的速度提高了约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

相关内容

  • 没有找到相关文章

最新更新