2013-10-18 90 views
0

鉴于非常稀疏的n×n个矩阵A NNZ (A)非零,和致密nxn的矩阵B。我想计算矩阵产品AxB。由于n非常大,如果天真地进行,密集矩阵B不能放入存储器。我有以下两种选择,但不确定哪一种更好。你能提出一些建议吗?谢谢。分块矩阵 - 向量乘法

Option1。我将矩阵B分成n列向量[b1,b2,...,bn]。然后,我可以将矩阵A和任何单个向量bi放入内存中,并分别计算A*b1, A*b2, ..., A*bn

Option2。我分别将矩阵AB分割成四个块,然后使用块矩阵 - 矩阵乘法计算A*B

以上哪个选择比较好?我可以说选项1在并行计算中有很高的性能吗?

+1

...使用Eigen,Armedillo或其他第三方矩阵库,而不是重新发明轮子。 – IdeaHat

+0

目前,我可能想知道以上两种选择的性能比较。 –

+0

n的数量级可能很有用......显然'root(n)'会适合内存?所以也许它实际上超出了一个典型的(16 GB)工作内存集的范围? n可能是10^21或更少? – 2013-10-18 20:43:36

回答

0

请参阅Scalapack文档中this document的两种方法的讨论,但对于两个密集矩阵。 Scalapack是分布式线性代数的参考工具之一。