并行处理实验报告:用MPI实现的矩阵乘法的加速比分析(推荐文档)(共13页).doc
《并行处理实验报告:用MPI实现的矩阵乘法的加速比分析(推荐文档)(共13页).doc》由会员分享,可在线阅读,更多相关《并行处理实验报告:用MPI实现的矩阵乘法的加速比分析(推荐文档)(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上华 中 科 技 大 学课程名称 并行处理实验名称 矩阵乘法的实现及加速比分析考生姓名 李佩佩考生学号 M系、年级 计算机软件与理论2013级类 别 硕士研究生考试日期 2014年1月3日一.实验目的1) 学会如何使用集群2) 掌握怎么用并行或分布式的方式编程3) 掌握如何以并行的角度分析一个特定的问题二.实验环境1) 硬件环境:4核CPU、2GB内存计算机;2) 软件环境: Windows XP、MPICH2、VS2010、Xmanager Enterprise3;3) 集群登录方式:通过远程桌面连接211.69.198.2,用户名:pppusr,密码:AE2Q3P0
2、。三.实验内容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的时间间隔非常短,又由于srand()函数的特点,导致生成的矩阵A和B完
4、全一样;然后,我就在两次调用之间加入了语句“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+)Mi = rand() % 2;for(i=0;ilen;i+)for(j=0;jlen;j+)Ni*len+j=Mj*len+i;/
5、稀疏矩阵的生成方法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,对于串行计算,只需要np=1;输出:程序的执行时间。在Windows XP下使用Microsoft Visual St
6、udio2010编程,由于稀疏矩阵和稠密矩阵的代码只是初始化部分不同,所以以稠密矩阵乘法为例,列出并行和串行的源代码。并行计算的矩阵乘法源代码:DenseMulMatrixMPI.c#include #include #include #include #define Length 1000int *A,*B,*C,*buffer,*ans;int temp,i,j,k; int procsID,procsNum,line;double startTime,endTime,totalTime; void InitMatrix(int *M,int *N,int len);/实现部分见上面voi
7、d 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,&procsNum);/获取进程数目line = Length/procsNum;/将数据分为(进程数)个块 A = (int*)malloc(sizeof(int)*Length*Length
8、); 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); startTime = MPI_Wtime(); for (i=1;iprocsNum;i+) MPI_Send(B,Length*Length,MPI
9、_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+) for (j=0;jLength;j+) C(k-1)*line+i)*Length+j =ansi*Length+j; for (i=(procsNum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 处理 实验 报告 MPI 实现 矩阵 乘法 加速 分析 推荐 文档 13
限制150内