矩阵乘法的并行化实验报告全解.docx

上传人:b****5 文档编号:3560310 上传时间:2022-11-23 格式:DOCX 页数:22 大小:477.18KB
下载 相关 举报
矩阵乘法的并行化实验报告全解.docx_第1页
第1页 / 共22页
矩阵乘法的并行化实验报告全解.docx_第2页
第2页 / 共22页
矩阵乘法的并行化实验报告全解.docx_第3页
第3页 / 共22页
矩阵乘法的并行化实验报告全解.docx_第4页
第4页 / 共22页
矩阵乘法的并行化实验报告全解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

矩阵乘法的并行化实验报告全解.docx

《矩阵乘法的并行化实验报告全解.docx》由会员分享,可在线阅读,更多相关《矩阵乘法的并行化实验报告全解.docx(22页珍藏版)》请在冰豆网上搜索。

矩阵乘法的并行化实验报告全解.docx

矩阵乘法的并行化实验报告全解

北京科技大学计算机与通信工程学院

实验报告

 

实验名称:

学生姓名:

专业:

班级:

学号:

指导教师:

实验成绩:

________________________________

实验地点:

实验时间:

2015年05月

一、实验目的与实验要求

1、实验目的

1对比矩阵乘法的串行和并行算法,查看运行时间,得出相应的结论;

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间隔行带划分法

算法描述:

将C=A*B中的A矩阵按行划分,从进程分得其中的几行后同时进行计算,最后通信将从进程的结果合并的主进程的C矩阵中

对于矩阵A*B

如图:

进程1:

矩阵A第一行

进程2:

矩阵A第二行

进程3:

矩阵A第三行

进程3:

矩阵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;

因此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

#include

#include

#include

#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

{

for(j=0;j

{

c[i][x]+=*(p1[i]+j)**(p2[j]+x);30*30m1*m

}

printf("%d",c[i][x]);

printf("");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,

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,

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,

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,

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,

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

};

7

for(i=0;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,

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,

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,

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,

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,

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,

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

};

for(i=0;i

{

pb[i]=b[i];m

}

intm1=30,n1=30;

printf("矩阵A*B=\n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1