MPI实现矩阵乘法的Cannon算法

1. 实验内容与方法

1) 对矩阵进行分块,之后按块进行乘法,使用的是cannon算法。Cannon算法是一种存储有效的算法。为了使两矩阵下标满足相乘的要求,它和并行分块乘法不同,不是仅仅让B矩阵的各列块循环移动,而是有目的地让A的各行块以及B的各列块皆施行循环移位,从而实现对C的子块的计算。将矩阵AB分成p个方块AijBij,每块大小为,并将它们分配给个处理器。开始时处理器Pij存放块AijBij,并负责计算块Cij,然后算法开始执行:

⑴将块Aij向左循环移动i步;将块Bij向上循环移动j步;

Pij执行乘加运算后将块Aij向左循环移动1步,块Bij向上循环移动1步;

⑶重复第⑵步,总共执行次乘加运算和次块AijBij的循环单步移位。

2) 初始化数组。使用vector定义矩阵A、B和C,设置矩阵大小均为6000 * 6000。使用srand((unsigned) time(NULL))设置使用系统定时器的值作为随机种子,随机初始化矩阵A和矩阵B的值。

3) 程序计时。使用MPI自带的MPI_Wtime()函数,MPI_Wtime()记录的是墙上时间,在CPU时间的基础上包括了空闲等待时间。在各进程计算过程分块矩阵C之前和之后使用MPI_Wtime()函数计时,不计算最开始的初始化过程MPI发送的时间和最后接收数据汇总成矩阵C的时间。

2. 运行时间

矩阵A、B和C的大小均为6000 * 6000,且。经过代码运行计时,得到以下的实验结果表格。

处理器个数

用时/秒

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值