2022年并行处理实验报告:用MPI实现的矩阵乘法的加速比分析 .pdf
《2022年并行处理实验报告:用MPI实现的矩阵乘法的加速比分析 .pdf》由会员分享,可在线阅读,更多相关《2022年并行处理实验报告:用MPI实现的矩阵乘法的加速比分析 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华 中 科 技 大 学课程名称并行处理实验名称 矩阵乘法的实现及加速比分析考生姓名李佩佩考生学号 M201372734 系、年级计算机软件与理论2013级类别硕士研究生考试日期 2014年 1 月 3 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -一.实验目的1)学会如何使用集群2)掌握怎么用并行或分布式的方式编程3)掌握如何以并行的角度分析一个特定的问题二.实验环境1)硬件环境:4 核 CPU、2GB 内存计算机;2)软件环境:Windows XP、MPICH2、VS2010、Xmanager Enterprise3;3)集群登录方式:通过远程桌面连接211.6
2、9.198.2,用户名:pppusr,密码:AE2Q3P0。三.实验内容1.实验代码编写四个.c 文件,分别为 DenseMulMatrixMPI.c、DenseMulMatrixSerial.c、SparseMulMatrixMPI.c 和 SparseMulMatrixSerial.c,用于比较并行和串行矩阵乘法的加速比,以及稀疏矩阵和稠密矩阵的加速比。这里需要说明一下,一开始的时候我是把串、并行放在一个程序中,那么就只有两个.c 文件 DenseMulMatrix.c和 SparseMulMatrix.c,把串行计算矩阵乘的部分放到了主进程中,即procsID=0的进程,但是结果发现执行
3、完串行后,再执行并行就特别的慢。另外,对于稀疏矩阵的处理方面可能不太好,在生成稀疏矩阵的过程中非0 元素位置的生成做到了随机化,但是在进行稀疏矩阵乘法时没有对矩阵压缩,所以跟稠密矩阵乘法在计算时间上没多大区别。方阵A和B的初始值是利用 rand()和srand()函数随机生成的。根据稀疏矩阵和稠密矩阵的定义,对于稀疏矩阵和稠密矩阵的初始化方法InitMatrix(int*M,int*N,int len)会有所不同。这里需要说明一下,一开始对于矩阵A和B的初始化是两次调用 InitMatrix(int*M,int len),生成A和B矩阵,但是随后我发现,由于两次调用方法 InitMatrix
4、的时间间隔非常短,又由于 srand()函数的特点,导致生成的矩阵A和B完全一样;然后,我就在两次调用之间加入了语句“Sleep(1000);”,加入头文件“#include”,这样生成的 A、B矩阵就不一样了,但很快问题又出现了,在 Xshell中不能识别头文件“#include”。所以,最后决定用下面的方法生成矩阵 A和B,B是A的转置。/稠密矩阵的生成方法void InitMatrix(int*M,int*N,int len)srand(unsigned)time(NULL);for(i=0;i len*len;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页
5、 -Mi=rand()%2;for(i=0;ilen;i+)for(j=0;jlen;j+)Ni*len+j=Mj*len+i;/稀疏矩阵的生成方法void InitMatrix(int*M,int*N,int len)for(i=0;ilen*len;i+)Mi=0;srand(unsigned)time(NULL);for(m=0;m224;m+)for(n=0;n224;n+)i=rand()%len;j=rand()%len;Mi*len+j=1;for(i=0;ilen;i+)for(j=0;jlen;j+)Ni*len+j=Mj*len+i;输入:并行执行的进程数procsNum,
6、对于串行计算,只需要np=1;输出:程序的执行时间。在 Windows XP 下使用 Microsoft Visual Studio2010 编程,由于稀疏矩阵和稠密矩阵的代码只是初始化部分不同,所以以稠密矩阵乘法为例,列出并行和串行的源代码。并行计算的矩阵乘法源代码:DenseMulMatrixMPI.c#include#include#include#include#define Length 1000 int*A,*B,*C,*buffer,*ans;int temp,i,j,k;int procsID,procsNum,line;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页
7、,共 13 页 -double startTime,endTime,totalTime;void InitMatrix(int*M,int*N,int len);/实现部分见上面void del()free(A);free(B);free(C);free(buffer);free(ans);int main(int argc,char *argv)MPI_Status status;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&procsID);/获取当前进程号 MPI_Comm_size(MPI_COMM_WORLD,&procsNu
8、m);/获取进程数目line=Length/procsNum;/将数据分为(进程数)个块 A=(int*)malloc(sizeof(int)*Length*Length);B=(int*)malloc(sizeof(int)*Length*Length);C=(int*)malloc(sizeof(int)*Length*Length);buffer=(int*)malloc(sizeof(int)*Length*line);ans=(int*)malloc(sizeof(int)*Length*line);if (procsID=0)InitMatrix(A,B,Length);start
9、Time=MPI_Wtime();for (i=1;iprocsNum;i+)MPI_Send(B,Length*Length,MPI_INT,i,0,MPI_COMM_WORLD);for (i=1;iprocsNum;i+)MPI_Send(A+(i-1)*line*Length,Length*line,MPI_INT,i,1,MPI_COMM_WORLD);for (k=1;kprocsNum;k+)MPI_Recv(ans,line*Length,MPI_INT,k,3,MPI_COMM_WORLD,&status);for (i=0;iline;i+)名师资料总结-精品资料欢迎下载-
10、名师精心整理-第 4 页,共 13 页 -for (j=0;jLength;j+)C(k-1)*line+i)*Length+j=ansi*Length+j;for (i=(procsNum-1)*line;iLength;i+)for (j=0;jLength;j+)temp=0;for (k=0;kLength;k+)temp+=Ai*Length+k*Bk*Length+j;Ci*Length+j=temp;endTime=MPI_Wtime();totalTime=endTime-startTime;printf(并行稠密矩阵乘法过程总共花的时间:%.4fsn,totalTime);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年并行处理实验报告:用MPI实现的矩阵乘法的加速比分析 2022 并行 处理 实验 报告 MPI 实现 矩阵 乘法 加速 分析
限制150内