【发布时间】:2019-09-28 08:30:23
【问题描述】:
我是 MPI 和并行计算环境的新手。我有来自https://sparse.tamu.edu/ 的不同稀疏矩阵,我试图通过分别具有 N x N 和 N x 1 大小的行分区来将稀疏矩阵与密集向量相乘。我将使用进程数 1、2、4、8、16 测试我的并行 MPI 程序。
我对该算法进行了一些研究,并从该演示文稿中找到了更好的解决方案和路线图。 https://www.sandia.gov/~mmwolf/presentations/CS591MH/CS591MH_20070913.pdf
算法是这样的;
- 首先,为每个进程逐行划分整个稀疏矩阵,并对密集向量进行划分。为了提高内存效率,还要存储稀疏矩阵的非零元素。
- 在进行任何计算之前,将已发送 x[j] 所需的向量元素发送到具有 j 列中的非零值。
- 进行计算并将每一行结果保存到输出向量中。
我不明白如何指定发送 x[j] 的远程进程。如果我指定,如何通过非阻塞发送和接收操作在这些进程之间进行通信?我应该为每个发送操作使用 for 循环吗?
提前致谢。
【问题讨论】:
-
这个算法真的需要自己实现吗?如果没有,许多预先存在的、经过验证和优化的并行线性代数库都是可用的,并且可以轻松使用。在这种情况下,请查看提供并行数据结构和并行线性代数算法的 PETSc (mcs.anl.gov/petsc) 或 Trilinos (trilinos.github.io)。
-
感谢您的回答,但我需要在不使用任何其他库的情况下在 C 中实现此算法。
标签: c mpi sparse-matrix