矩阵乘法的并行化实验报告全解Word文档下载推荐.docx
- 文档编号:16465621
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:22
- 大小:477.18KB
矩阵乘法的并行化实验报告全解Word文档下载推荐.docx
《矩阵乘法的并行化实验报告全解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《矩阵乘法的并行化实验报告全解Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
2观察并行算法不同进程数运行结果,分析得出结论;
2、实验要求
1编写矩阵乘法的串行程序,多次运行得到结果汇总;
2编写基于MPI,分别实现矩阵乘法的并行化。
对实现的并行程序进行正确性测试和性能测试,并对测试结果进行分析。
二、实验设备(环境)及要求
《VS2013》C++语言
MPICH2
三、实验内容与步骤
实验1,矩阵乘法的串行实验
(1)实验内容
编写串行程序,运行汇总结果。
(2)主要步骤
按照正常的矩阵乘法计算方法,在《VS2013》上编写矩阵乘法的串行程序,编译后多次运行,得到结果汇总。
实验2矩阵乘法的并行化实验
3个总进程
5个总进程
7个总进程
9个进程
16个进程
四:
实验结果与分析
(一)矩阵乘法并行化
矩阵并行化算法分析:
并行策略:
1间隔行带划分法
算法描述:
将C=A*B中的A矩阵按行划分,从进程分得其中的几行后同时进行计算,最后通信将从进程的结果合并的主进程的C矩阵中
对于矩阵A*B
如图:
进程1:
矩阵A第一行
进程2:
矩阵A第二行
进程3:
矩阵A第三行
进程1:
矩阵A第四行
时间复杂度分析:
f(n)=6+2+8+k*n+k*n+k*n+3+10+n+k*n+k*n+n+2
(k为从进程分到的行数)
因此O(n)=(n);
空间复杂度分析:
从进程的存储空间不共用,f(n)=n;
因此O(n)=(n);
2间隔行带划分法
因此T(n)=O(n);
测试环境简介:
《VS2013》
Win7旗舰版
正确性测试结果:
并行结果:
串行结果:
通过比较发现两者相同,因此可以确定运算结果正确。
性能测试结果:
串行
125ms
107ms
108ms
98ms
109ms
110ms
3进程
0.009647ms
0.009936ms
0.010825ms
0.009207ms
0.008811ms
0.009831ms
5进程
0.007795ms
0.007648ms
0.008588ms
0.008334ms
0.007686ms
0.007731ms
7进程
0.010729ms
0.011336ms
0.011606ms
0.011403ms
0.011621ms
0.014563ms
9进程
0.016547ms
0.014439ms
0.016300ms
0.015455ms
0.015187ms
0.011240ms
16进程
0.024964ms
0.027917ms
0.024721ms
0.028152ms
0.022296ms
0.021321ms
通过对比分析得出,并行算法能够有效提高矩阵乘法的运算效率;
(二)串行算法分析
时间复杂度:
f(n)=2+n^2+2*n+3*n+7+n+n+7;
因此T(n)=O(n^2)
空间复杂度:
T(n)=O
(1)
五:
结论(讨论)
1、实验结论
(1)根据前面实验结果,可以证明并行算法比串行算法更能有效地运算矩阵乘法,可以提高效率数十倍
(2)如下图,根据结果可以得出并行程序并不是进程数越多,程序运行时间越短,程序运行还受计算机运算器数的限制
2、讨论
1由于矩阵乘法的运算并不是很复杂,因此运算时间很短,达到了毫秒级,因此准确度有一定的影响;
2因为时间紧迫,未能进一步分析代码,同时只用了一种并行算法。
六:
代码附录
串行算法:
#include<
stdio.h>
conio.h>
iostream>
time.h>
#defineN30
#defineM30
voidjuzhen_mul(intm,intn,int*p1[M],intm1,intn1,int*p2[M])
{
inti,j,x=0;
intc[N][M]={0};
2
for(i=0;
i<
m;
)
{
for(j=0;
j<
m1;
j++)
{
c[i][x]+=*(p1[i]+j)**(p2[j]+x);
30*30m1*m
}
printf("
%d"
c[i][x]);
"
);
2*302*m
x++;
if(x==n1)
x=0;
i++;
printf("
\n"
2*303*m
}
}
voidmain()
doublestart,finish;
start=(double)clock();
charH;
inti,j;
int*pa[M],*pb[M];
intm=30,n=30;
inta[M][N]={90,6,55,1,81,18,40,57,43,23,51,73,97,3,89,57,98,58,7,12,72,2,35,74,60,59,23,30,67,53,
46,35,12,64,97,21,69,31,21,77,14,64,71,97,5,46,100,57,64,34,20,3,4,5,67,20,5,41,99,53,
63,90,70,73,34,55,42,27,1,85,32,85,26,69,91,43,31,73,32,49,15,74,79,8,90,75,8,85,49,68,
15,38,50,39,91,22,47,97,45,82,96,66,81,40,58,75,75,26,61,59,51,17,66,56,20,39,62,29,57,94,
81,34,9,54,58,33,96,2,55,7,38,43,87,19,72,91,16,28,53,12,76,39,50,99,63,28,89,43,19,12,
90,6,55,1,81,18,40,57,43,23,51,73,97,3,89,57,98,58,7,12,72,2,35,74,60,59,23,30,67,53,
81,34,9,54,58,33,96,2,55,7,38,43,87,19,72,91,16,28,53,12,76,39,50,99,63,28,89,43,19,12
};
7
i++)
pa[i]=a[i];
m
intb[M][N]={90,6,55,1,81,18,40,57,43,23,51,73,97,3,89,57,98,58,7,12,72,2,35,74,60,59,23,30,67,53,
};
pb[i]=b[i];
m
intm1=30,n1=30;
printf("
矩阵A*B=\n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 乘法 并行 实验 报告