MPI将矩阵划分为更小的矩阵

时间:2016-07-09 19:56:53

标签: c mpi

情况是这样的: 我有一个4x4维度的数组,我要做的就是将这个矩阵分成"块"(也就是更小的矩阵)并将它们分配给" slave-processes"。更具体地说,假设处理的总量是4(1个主处理器,3个从处理器并且将计算要计算的数量),这使得将4×4矩阵划分为4个2×2矩阵。然而,除了制作"缓冲区"大小2x2应该避免(实际上我想避免它)。 问题是:有没有"聪明"更多"无痛"管理它的方法?

PS:我必须管理这个问题http://www.cas.usf.edu/~cconnor/parallel/2dheat/2dheat.html,这意味着将创建一个笛卡尔通信器。

1 个答案:

答案 0 :(得分:1)

这基本上是(普通的)MPI的工作原理。 2×2矩阵构成分布式数据结构。它们一起构成了实际的4×4矩阵。您当然也可以使用四个1×4或4×1矩阵,这确实有一些优点(更容易编程)和缺点(缩放时需要更多通信)。

在实际问题中,例如2D热方程,您经常需要考虑每个局部矩阵周围的晕圈。然后在模拟步骤期间交换该晕圈。 请注意,您链接的代码在每个工作级别上使用完整大小的矩阵。这是一种简化,但浪费了资源,因此无法扩展。

MPI为您提供了一些帮助来管理这些分布式数据,例如通过笛卡尔通信器,或单方面通信,以便更轻松地进行光环交换,但基本上您必须管理分布式数据结构。

有一些并行的范例可以提供更高级别的分布式数据结构抽象,但即使是概述,恕我直言也会对这种格式过于宽泛。其中许多与分区全局地址空间(PGAS)概念有关。实现可以从新语言,语言扩展(Co-array Fortran)到库和框架。有些人在内部使用MPI。