mpi学习日志(10):mpi4py实现简单并行矩阵乘法

本文介绍了如何使用mpi4py在MPI环境中实现简单并行矩阵乘法。通过将进程分为行通信组和列通信组,利用散播操作分发矩阵数据,然后使用gather收集结果,最终由进程0组合成最终矩阵。代码中详细展示了不同进程的行为,并提到了矩阵B需转置以进行列散播。
摘要由CSDN通过智能技术生成

除了之前利用gather求π之外,我们就没有写过mpi程序的实例.

今天我们就尝试用mpi去写一个简单的并行矩阵乘法,虽说是并行,但不是使用经典的分治去处理,而只是简单地每个进程计算一个格子的值.


计算的式子是这样的,3*2的矩阵A乘上2*3的矩阵B,得到3*3的矩阵C.

这样的话,我们就需要9个进程去计算每个格子的值.


问题分析:

我们假设一开始只有进程0拥有矩阵A和B的数据,也就是说进程0要把数据分发到各个进程.

但我们知道,每个格子并不需要整个矩阵,它只需要某行或某列即可.

具体来说,第i行第j列的格子,需要矩阵A的第i行和矩阵B的第j列.

按照这样分发的话,我们需要设计复杂的分发过程,而不是直接让进程0广播出去.


算法设计:

我们可以使用Split,按行把进程分割成3个新的通信组,又按列分割成3个新通信组.

这样的话,每个进程都有3个通信子,全局通信子,行通信子,列通信子.

我们注意到,行通信组里的进程需要相同的行,列通信组里的进程需要相同的列.

那么,只要我们行首和列首拥有对应的行和列,它就可以直接广播这个行和列.

怎么让行首和列首获得相应的行和列?很简单,用散播就行.

我们让进程0在第0列散播A的行,让进程0在第0行散播B的列,就行了!

而对于结果,直接用gather收集起来.最后进程

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值