【发布时间】:2020-07-28 05:32:16
【问题描述】:
我想用 C++ Tensorflow 写稀疏矩阵密集向量(SPMv)乘法:y = Ax
稀疏矩阵 A 以 CSR 格式存储。 A 的通常稀疏度在 50-90% 之间。目标是达到比密集矩阵密集向量 (DMv) 乘法更好或相似的时间。
请注意,我已经查看了以下帖子:Q1Q2Q3。但是,我仍然想知道以下几点:
- SPMv 乘法在时间方面与 DMv 相比如何?由于稀疏性相对较高,我认为 SPMv 应该更好,因为减少了操作数量 - 是吗?
- 为了使 SpMv 在时间上与 DMv 相同或更好,我应该考虑哪些因素?为什么有人说 DMv 会比 SPMv 表现得更好?存储表示会有所不同吗?
- 任何在 C++ 中为 CPU 或 GPU 实现执行 SPMv 的推荐库。
这个问题与我在这里的另一个问题有关:(CSCC: Convolution Split Compression Calculation Algorithm for Deep Neural Network)
【问题讨论】:
-
50% 的稀疏度不值得使用任何稀疏矩阵格式。为了让它变得有价值,它需要远低于 1%。
-
@HossamAmer 稀疏格式要求至少存储每个条目以及条目的列或行索引。因此,假设 32 位索引和值是存储的因子 > 2。并且缓存中的数据不那么规则且更难(而且您可能会丢失矢量化)。
-
@Joe 谢谢!我编辑了我的问题,让我们只关注时间......我希望我的执行时间比 DMv 更好我已经看到以下 link 解释了 CSR 乘法 - 即使其中有这个算法,时间会更糟?我认为内存访问是连续的和缓存友好的 + 更少的(加法和乘法)操作 - 不是吗?
-
欢迎来到 SO;关于您的第三个问题,请花点时间阅读What topics can I ask about here?,并注意要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题已关闭-SO 的主题。
-
好的,谢谢! :)
标签: c++ sparse-matrix matrix-multiplication