【发布时间】:2013-10-18 20:37:51
【问题描述】:
给定一个非常稀疏的 nxn 矩阵 A,其中 nnz(A) 非零,以及一个密集的 nxn 矩阵 B .我想计算矩阵乘积AxB。由于n非常大,如果幼稚地执行,密集矩阵B是无法放入内存的。我有以下两种选择,但不确定哪一种更好。能否给点建议。谢谢。
选项 1。我将矩阵B 划分为n 个列向量[b1,b2,...,bn]。然后,我可以将矩阵A 和任何单个向量bi 放入内存,并分别计算A*b1, A*b2, ..., A*bn。
选项 2。我将矩阵A和B分别划分为四个n/2Xn/2块,然后使用块矩阵-矩阵乘法计算A*B。
以上选择哪个更好?我能说方案一的并行计算性能很高吗?
【问题讨论】:
-
...使用 Eigen、Armedillo 或其他一些 3rd 方矩阵库,而不是重新发明轮子。
-
目前可能想知道以上两种选择的性能对比。
-
n 的数量级可能有用...显然
root(n)将适合内存?那么也许它真的超出了典型(16 GB)工作内存集的范围? n 可能是 10^21 或更小? -
n可能约为 2M。 -
然后en.wikipedia.org/wiki/… 好了。方法1本质上是教科书长乘法,方法2比Karatsubas算法差。
标签: c++ performance matrix parallel-processing