并行计算累加和_第1页
并行计算累加和_第2页
并行计算累加和_第3页
并行计算累加和_第4页
并行计算累加和_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、并行计算课程设计班级:12级计科一班 姓名:郭慧敏 学号:121013040一、实验内容:使用MPI并行程序设计方法设计矩阵加法的并行程序。随机产生所需的矩阵元素尽量设计较高的加速比二、程序段:1、方法一:利用MPI.Send和MPI_Recv实现多进程并行#define MPICH_SKIP_MPICXX#iiiclude #iiiclude #iiicludehitarg,chat * arv)mta1010;mt b1010;mtc1010;mt myraiiksize.b l,cl jjjows,offset;double end_tmie,stait_time;MPI_Status

2、status;MPI_Iiut(&arg.&aiv);MPI_Comm_iank(MPI_COMM_WORLD,&niyrank);MPI_Comm_size(MPI_COMM_WORLD,&size);if(myraiik=O)prmtf(H 当前进程数是:dn,size);pnntf(”进程号:dmyraiik);if(myrai = 0)(/生成三个随机数组a、b、cfor (1=0; i10; i+)(for(j=0;j10;j+)aiJj = rand() % 10;biIj = randQ % 10;cij = 0;)/输出a数组的各元素pnntf(”aiT);fbr(i=O; i

3、10; i+)(for(j=0;j10;j+)(prmtfC%d 侦亚);pnntf(”n”);输出a数组的各元素pnntf(”biT);fbr(i=O; i10; i+)for(j=0;j10;j+)(pnntf(”d ”,bij);)pnntf(”n”);bl=10/(size-l);cl=10%(size-l);offset = 0;fbr(i=l; isize; i+)rows = (i =cl) ? bl+1: biy/ffi二维数组按行平均分配给进程prmtf(nsendmg %d rows to process %dn”, rows, i);MPI_Send(&offset, 1

4、MPI_COMM_WORLD);发送行偏移量MPI_Send(&rows, 1 .MPI_INT,i,0, MPI_COMM_WORLD);发送行数MPI_SEd(&aoffset0,rows*10,MPI_INT,iQMPI_COMM_WORLD);/ 把数组a元素发送给其他进程MPI_Send(&boffset0,rows*10,MPI_INT,iQMPI_COMM_WORLD); 把数组b元素发送给其他进程offset += rows;)else(MPI_Recv(&offset, LMPI_INT,OQMPI_COMM_WORLD.&status);MPI_Recv(&iows, 1

5、MPI_INT.OQMPI_COMM_WORLD&status);MPI_Recv(&a,iows* 10,MPI_INT,OQMPI_COMM_WORLD,&status);MPI_Recv(&b,iows* 10,MPI_INT,OQMPI_COMM_VORLD.&status);矩阵加法fbr(i=O; irows; i+)(for(j=0;j10;j+)(cij = aij+bij;)if(myrai != 0) (MPI_Send(&offset, 1 ,MPI_INT,0,0,MPI_COMM_WORLD);MPI_Send(&rows,LMPI_INT.O, 0, MPI.COM

6、M.WORLD);/ MPI_Send(&a,iows* 10,MPI_UNSIGNED_LONG_LONG,0,0,MPI_COMM_WORLD);MPI_Send(&c,rows*0,MPI_UNSIGNED_LONG_LONG0,0,MPI_COMM_WORLD);else(staivtiine = MPI_WtimeQ;fbr(i=l; isize; i+)(MPI_Recv(&offset, 1. MPI_INT,0, MPI_COMM_WORLD. &status); 接收行偏移量MPI_Recv(&iows,LMPI_INT.i,0, MPI_COMM_WORLD, &statu

7、s); 接收行数MPI_Recv(&coffset0, rows* 10, MPI_UNSIGNED_LONG_LONG, i, 0, MPI_COMM_WORLD, &status); Z/C接收从进程发回的结果end_time = MPI_Wtiine();prmtf(Hprocess cost %f secondsii, end_timestart_time);fbr(i=O; i10; i+)for(j=0;j10;j+)pnntf(”-3d M,cij);pnntf(”n”);MPI_Fmalize();return 0;运行结果截图:(!)进程数是7:(2)进程数是4:exeSB

8、C:Window5Sy5tem32cmcL进程号:2当前诳程数是屈程号:0a14 9 825115 7(12 2 18719T 5p 2 3 137273 9SOSO4600& 39 4 & 614&78 9$ 9 4 731407 76 15 51016T 7T 3 5 912&30 2U 4 S 521468 8|1 3 S 078870 3k04845T12 8k 3 2 858829 4|1 3 4 184T91 85 2 & 285901 8p 4 0 689382 15 8 0 6&5293 2p 6 7 420401 739886081 5p 7 3 106019 4k 9 8

9、873317 4zeniing4rowstoprc-csz 1seniing3rows槌pr c-ess 2seniing3rowspr c-ess 3processcost 0.000096 secondsS 4131&108271355471313911169k 57211 1191&41711214212119071112 86129139151010&174139669109&7129305681414614IT986111T9遂程号1 1诞程号,3111182T47171512166141111877p LZ. io请按任意键继续.2、方法二:利用MPLScatteiv和MPI_Ga

10、tterv实现多进程并行#define MPICH_SKIP_MPICXX#iiiclude #iiiclude #iiicludehit aigc.chai * argv)mta1010;mt b1010;mtC1010;mtA1010;mtB1010;mtD1010;int rank.size,x,y,rc 10,rd 10 ,i,j;double end tune.stan time;MPI_Imt(&argc.&argv);MPLComm_nmk(MPI_COMM_WORLD.&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);if(raiik=O)p

11、iiiitf(当前进程数是:%dii,size);pnntf(”进程号:%d irrank);x=10/size;v=10%size;fdr(i=O;isize;i-H-)rci=x;fbr(i=0;iy;i-H-)rc 国+;fbr(i=0;isize;i-H-) rci=rci*10;id0=0;fbr(i= 1 ;isize;i+)rd i=rd i- l+rc i-1;/主进程if(raiik = 0) (生成三个随机数组a、b、cfor (i=0; i10; i+)(for(j=0;j10;j+)(aij = iand() % 10;bij = iand() % 10:Aij = 0

12、;Bij = 0;Cij = 0;DiQ = 0;)输出A数组的各元素printf(An-);fbr(i=O; i10; i+)for (j=0;j10;j+)(prmtfC%d M,aij);)pnntf(”n”);输出B数组的各元素pnntf(”BW);fbr(i=O; i10; i+)for(j=0;j10;j+)(pnntf(”d bij);)pnntf(”n”);)MPI_ScatteN(&aOO】c,rd,MPI_INT,&AOO,rcmnk,MPI_INT, 0,MPI_COMM_WORLD);MPI_ScatteN(&bOO】c,Ki,MPI_INT,&BOO,rcnink.M

13、PI_INT, 0,MPI_COMM_WORLD);矩阵加法的实现fbr(i=O; iicraiik/10; i+)(for(j=0;j10;j+)(Cij=Aij+Bij;)/*pnntf(HA nn);fbr(i=O ;irc rank/lffor(j=OjviOj+)(pimtfC%d ”.Ai。);)pnntR”n);prmtf(”B W);fbr(i=O ;irc rank/10;i+)ffor(j=OjviOj+)(pnntf(”d Bi|j);)pnntffn”);printf(nC nn);fbr(i=O ;irc rank/lffor(j=OjviOj+)printf(nnn

14、);可输出计算结果pnntf(-C=A+B=n-);MPI_Gatherv(&COO,rcrank,MPI_INT,&DOO,0idMPI_INT.O,MPI_COMM_VORLD);if(raiik=O)(for(i=0: i10; i+) for(j=0;j10;j+)( pnntf(”3d Dij);pnntf(”n”); )MPLFmalizeQ;return 0;国j C:WindowsSystem32md.exe1 4 9 8 2 5 11,12 2 18 7 19(3 2 3 1 3 7 276 0 8 0 4 6 009 4 6 6 1 4 673 9 4 7 3 140& 1 5 5 1 0 16T35912630 4 3 5 2 1461 3 8 0 7 8 873口T 0 4 8 4 5 714 3 2 6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论