在花了大量时间从源代码构建ATLAS之后,我在OpenSUSE 13.1存储库中发现了libopenblas和libatals我的问题是
-
在存储库中轻松安装(无需在自己的计算机上进行调整)"libatlas"真的能提高计算性能吗?
-
OpenBLAS是比ATLAS更好,还是只比Linux风格的存储库中易于安装的"libatlas"更好?请参阅使用OpenBLAS获得更快的R:比ATLAS更好,在Ubuntu上切换到它很简单。
-
我遵循了这篇用OpenBLAS编译Numpy的文章,但找不到"Numpy.core_dotblas"模块。更重要的是,我无法同时使用ATLAS和OpenBLAS构建Numpy。
-
有人能发布一个.py文件或bash代码来比较ATLAS和OpenBLAS吗?例如
-
我用自己的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