【问题标题】:MPI partition a matrix into smaller matricesMPI 将矩阵划分为更小的矩阵
【发布时间】:2016-11-12 03:42:06
【问题描述】:

情况是这样的: 我有一个尺寸为 4x4 的数组,我要做的就是将此矩阵划分为“块”(也称为较小的矩阵)并将它们分配给“从属进程”。更具体地说,假设进程总数为 4(1 个主进程,3 个从属进程,所有进程都将计算要计算的内容),这使得 4x4 矩阵划分为 4 个 2x2 矩阵。然而,除了应该避免制作大小为 2x2 的“缓冲区”(实际上我想避免它)。 问题是:有没有什么“聪明”、更“无痛”的方法来管理它?

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

【问题讨论】:

  • 你无法避免。

标签: c mpi


【解决方案1】:

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

在实际问题中,例如二维热方程,您经常需要考虑每个局部矩阵周围的光环。然后在模拟步骤期间交换该光环。 请注意,您链接的代码在每个工人等级上使用全尺寸矩阵。这是一种简化,但会浪费资源,因此不可扩展。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多