Matrix 矩阵向量乘法-稀疏矩阵与密集矩阵

Matrix 矩阵向量乘法-稀疏矩阵与密集矩阵,matrix,parallel-processing,Matrix,Parallel Processing,我想用C实现一个矩阵向量乘法。我的矩阵是1000*1000^2,高度稀疏,小于0.01%的非零元素。非零元素分散在每行0到126个非零元素之间的行中 我听说,一般来说,使用并行处理稀疏矩阵向量乘法具有挑战性,而且效率不如密集矩阵,因为计算与内存访问的比率较低。但我无法真正理解稀疏矩阵和密集矩阵之间的主要区别是什么,因为并行计算会降低稀疏矩阵的效率。对于密集矩阵,似乎同样的问题仍然存在。如果我错了,请纠正我 如果能让我知道密集矩阵与稀疏矩阵在并行处理方面的区别,我将不胜感激。 谢谢我想关键是你不能

我想用C实现一个矩阵向量乘法。我的矩阵是1000*1000^2,高度稀疏,小于0.01%的非零元素。非零元素分散在每行0到126个非零元素之间的行中

我听说,一般来说,使用并行处理稀疏矩阵向量乘法具有挑战性,而且效率不如密集矩阵,因为计算与内存访问的比率较低。但我无法真正理解稀疏矩阵和密集矩阵之间的主要区别是什么,因为并行计算会降低稀疏矩阵的效率。对于密集矩阵,似乎同样的问题仍然存在。如果我错了,请纠正我

如果能让我知道密集矩阵与稀疏矩阵在并行处理方面的区别,我将不胜感激。
谢谢

我想关键是你不能从矩阵的稀疏性中获得太多。理想情况下,一个元素n=0.01%的矩阵相乘所需的时间要少得多,但实际上,根据你所做的事情以及你如何做,你很可能会非常接近于对同样大小的矩阵进行密集相乘的成本。例如,如果您有一个更复杂的数据结构,那么即使您设法减少了所需的浮点运算总数,遍历的成本与内存访问的成本相比如何。谢谢您的评论。假设我们有一个新的稠密矩阵B,其元素数与原始稀疏矩阵a相同。稠密矩阵的大小将小得多。矩阵向量乘法Ax和Bx需要几乎相同数量的触发器,并且两个矩阵中的非零元素数量相同。我的问题是,Ax和Bx在内存访问方面有什么区别?哪一个更快?感谢相同数量的非零元素,这在某种程度上仍取决于稀疏矩阵的存储方式。在SIMD硬件上,密集情况可能会更快,因为它只是在单个内存块上进行迭代,并在紧循环中以尽可能快的速度执行正确的_mm_mul_p或类似操作。在稀疏情况下,内存访问的顺序通常较小,如果非零元素的数量相同,则理想情况下,每个分支所需的时间完全相同,但即使您针对稀疏矩阵的特定布局进行优化,也很难做到这一点,即使进行了所有优化,您可能仍会有一些情况下需要做额外的工作或工作以次优方式完成的。