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

您所在的位置:网站首页 cannon算法的mpi程序 mpi学习日志(10):mpi4py实现简单并行矩阵乘法

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

2024-07-02 09:51| 来源: 网络整理| 查看: 265

除了之前利用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收集起来.最后进程



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3