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 和 -framework Accelerate 应该足够了 不... main.cpp:43:10: 致命错误:找不到'veclib/Sparse/BLAS.h'文件 #include &lt;veclib/Sparse/BLAS.h&gt;。我什至没有进入链接器,它对你有用吗?当然#include &lt;Accelerate/Accelerate.h&gt; 有效,我使用的是 OSX 10.11.5、Xcode 7.3.1 和 Apple LLVM 版本 7.3.0 (clang-703.0.31)。

以上是关于OSX 上的稀疏 BLAS的主要内容,如果未能解决你的问题,请参考以下文章

稀疏数据集上的光谱聚类

大型稀疏矩阵上的快速非负矩阵分解

折叠稀疏矩阵的最佳方法

大型稀疏矩阵分解

DeepRec 大规模稀疏模型训练推理引擎

算法----稀疏矩阵之三元组