【问题标题】:Partitioned Matrix-Vector Multiplication分区矩阵向量乘法
【发布时间】: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。我将矩阵AB分别划分为四个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


【解决方案1】:

在 Scalapack 文档中的 this document 中查看对这两种方法的讨论,尽管是针对两个密集矩阵。 Scalapack 是分布式线性代数的参考工具之一。

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2020-01-17
    • 2016-01-23
    • 2017-11-08
    相关资源
    最近更新 更多