OSX 上的稀疏 BLAS
Posted
技术标签:
【中文标题】OSX 上的稀疏 BLAS【英文标题】:Sparse BLAS on OSX 【发布时间】:2016-06-13 14:46:25 【问题描述】:我刚刚发现 SparseBLAS 包含在 OSX 的Accelerate
框架中。
% ls -l /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A
total 25360
drwxr-xr-x 5 root wheel 170 May 18 09:49 Resources/
drwxr-xr-x 3 root wheel 102 May 18 09:49 _CodeSignature/
-rwxr-xr-x 1 root wheel 5115440 May 5 08:00 libBLAS.dylib*
-rwxr-xr-x 1 root wheel 13518752 May 5 08:00 libLAPACK.dylib*
-rwxr-xr-x 1 root wheel 254240 May 5 08:00 libLinearAlgebra.dylib*
-rwxr-xr-x 1 root wheel 334128 May 5 08:00 libSparseBLAS.dylib*
-rwxr-xr-x 1 root wheel 3715824 May 5 08:00 libvDSP.dylib*
-rwxr-xr-x 1 root wheel 2602304 May 5 08:00 libvMisc.dylib*
-rwxr-xr-x 1 root wheel 50320 May 5 08:07 vecLib*
我正在尝试查找是否可以使用它来优化我的计算,但是关于这个主题的信息几乎没有。
我发现的唯一合理代码是this question,但包括Accelerate.h
标头不足以找到问题中提到的BLAS_duscr_begin
等稀疏例程。
需要明确的是,我在 Apple 的 official Accelerate Framework 中找不到对 sparse-anything 的任何引用。
在这个话题上运气好吗?
【问题讨论】:
如果没有记录,您如何发现? 我开始查看包裹的内部。问题已更新。 它发生了。但您可能不想依赖未得到官方支持的东西。 我认为你完全正确。 【参考方案1】:我没有发现任何迹象表明 SparseBLAS 存在于 Accelerate Framework 中。
但如果您愿意接受其他选项,我建议您使用 MKL,它现在可供所有用户免费使用。
https://software.intel.com/en-us/articles/free-mkl
如果您愿意接受一些性能损失并想让您的生活更轻松,您可以使用 Eigen。
http://eigen.tuxfamily.org/index.php?title=Main_Page
或具有 MKL 支持的 Eigen。虽然 MKL 只会加速密集矩阵运算,但使用 Eigen 作为容器还是不错的。
https://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html
在 MKL 链接线顾问的帮助下
https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
您应该能够将线程 MKL 与 clang 编译器一起使用。
请注意,线程化 MKL 需要英特尔 OpenMP 支持并不意味着您需要支持 OpenMP 的编译器,因为您不会尝试在代码中使用 #pragma omp
。
【讨论】:
感谢@Eric,但似乎MKL 不支持clang
的线程。
我没试过,但据此,它支持带有-liomp5
链接选项的openmp。 software.intel.com/en-us/articles/intel-mkl-link-line-advisor
是的,但我没有 OpenMP,所以我无法链接 libiomp5.dylib
。我认为i
代表英特尔,所以它可能是一个icc
-only 库。
我提供的链接表明它可以与clang一起使用。链接使用 openmp 的库并不意味着您需要支持 openmp 的编译器。您只需要一个可以将您的 obj、lib (MKL) 和 openmp lib (iomp5) 链接在一起的链接器。 MKL 链接行顾问(链接)可以为您生成正确的链接和编译选项,以使用带有 clang 的线程 MKL。
谢谢@Eric。虽然没有我可以使用的 OpenMP 库。至少,并非没有诉诸 GCC。我错过了什么吗?【参考方案2】:
#include <veclib/Sparse/BLAS.h>
看看里面的奇迹!
https://developer.apple.com/videos/play/wwdc2015/712/Luke Chang
【讨论】:
感谢指点,我错过了视频。不过,我似乎看不到如何“正确”使用该库。我的意思是,它不在我可以在 Xcode 中添加的库列表中。您是否成功地以“苹果方式”使用 openblas? #include#include <veclib/Sparse/BLAS.h>
。我什至没有进入链接器,它对你有用吗?当然#include <Accelerate/Accelerate.h>
有效,我使用的是 OSX 10.11.5、Xcode 7.3.1 和 Apple LLVM 版本 7.3.0 (clang-703.0.31)。以上是关于OSX 上的稀疏 BLAS的主要内容,如果未能解决你的问题,请参考以下文章