ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:445.12KB ,
资源ID:29701694      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29701694.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(mpi冒泡排序并行化.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

mpi冒泡排序并行化.docx

1、mpi冒泡排序并行化北京科技大学计算机与通信工程学院实 验 报 告 实验名称: 冒泡排序的并行化 学生姓名: 朱帅 专 业: 计算机科学与技术 班 级: 计0 学 号: 指导教师: 李建江 实验成绩: 实验地点: 机电楼1 实验时间: 2015年4月日 一、实验目的与实验要求、实验目的(1)学会将串行程序改为并行程序 (2)学会mc2的使用。 (3)学会oenmp的配置。()mpi与openmp之间的比较。、实验要求(1)将串行冒泡程序局部并行化,以降低时间消耗。 (2)理论上求出时间复杂度之比,根据结果得出时间消耗之比,进行比对分析.二、实验设备(环境)及要求Vs203,mpi2三、实验内容

2、与步骤1、实验一 mpi并行(1)实验内容1、写出一个冒泡排序程序,求出其时间复杂度,并运行得到相应的时间消耗2、将冒泡程序改为mi并行程序:将全部需要排序的数分成4等份,分给四个进程一起冒泡,最后将所得的结果归到一个进程,进行归并排序,得到结果,得到时间消耗。算出时间复杂度。3、对得出的结果进行讨论与分析。 (2)主要步骤1、串行冒泡程序 时间复杂度:取所要排序的数的个数为个,时间复杂度为n*n/2。代码实现:/ maopao.cpp :定义控制台应用程序的入口点。/#ilue sdafx。incle ”stdlb.#includetme。h”cost it AY_SIZE= 12000;i

3、ntmain(int arg, char arv) itznghARRAY_IZE; nd(6); time_ o_me,ed_t;or(i i ;i RA_SZ; +) zonghi=rd(); w_tim = time(LL); for(t i =; i ARRAY_IE; i+) for(ntj ARR_SIE - 1;j ; -) if (zongshuj zongshuj 1) n z = zgshu ; ongsuj 1 = zonghuj; zongsuj =z; n_time = tim(NUL);lo ijian=nd_tim- nowte;for (in i= ; AAYI

4、Z; i+) pintf(” , zngsui);ritf(”所用时间:ld”,sia);wie (rue);2、并行程序时间复杂度:取所要排序的数的个数为个,进程数为m个.时间复杂度:(n/)*(n/m)/2)+n4*n。代码实现:/MTt.cpp: 定义控制台应用程序的入口点./ncde sfx.h#inlude mpi。h#iclue stdih#nclude mh。#clue”sdlib。h”#defi SE 4/进程数cnst int ARRAY_SIZE = 300;/每个进程分配的个数nshuzuSZEARRAYSIE;int zonghanhuSIZEARRA_SZ;doul

5、entime;void catr1(int);int in(int rgc, car rg) it i; MI_Iit(arc, &arg); Iommrank(MI_OMM_WD,md); Sater_1(myid);MPIFinalize();voidcatter_1(int yi) it numtasks;srand(86); for (int i = 0; SIZE; i+) or (nt j= ;j ARY_SE; j+) shuzi = rad(); /随机生成数组it iaopaARRAY_SIZE;doblesttm =MPI_Wtime();MPICsize(P_OM_OD,

6、 &utaks);if(umts = IZE) MI_Scer(suzu, ARRY_SZE,MPI_INT,xaoaixu, AY_IZ, PI_INT, 0,PCOMMWRLD);fr(n i = 0; iARRAY_IZ; +) for (i = ARRA_SIE ; j i;j-) i (iopauj= iopaxuj 1) nt z aopaixuj - 1; xiaaixuj -1 = iaoaiuj; xiaopixuj = z; /每个进程里的冒泡排序 MPI_Gather(xiaopau,ARAY_SIE, PI_N, onhnsu, ARAY_SIZE, PI_, 0, M

7、ICOMMORLD); intimeSIZ; r (inti = 0; i SIE; i+) iei = 0; int SIZE; int zongaiu2ARRAY_SIZESIZE; r (in j =RAYSIZE*SIZE 1; = 0;-) for(nt k = 0; k =ARRAY_IZE) ak = 0; ese ak zonghashkARRY_SIZE - timek - 1; nx = a0; for(inti 1; ix) x ai; or (int = 0; n SIZE; n+) if (x= an) tie =imen + 1; brek; zogpaixu2j

8、= x; endwtie= MPI_Wtime(); if (myi); esfor( i = 0; IZEARRY_IZE; i+)printf(” ”, ongpaixu2i); if (yi);else rintf(all loc ime=”,endwtme trtwtime);、实验在实验一的基础上将程序改为opnmp。 代码实现:(水平不高,写的程序通用性不好,只写了四线程的) /Ope。c : 定义控制台应用程序的入口点。/#inlude sdafx。h”#ncue stdio。h#inlueath。hinclue ”stdlb.hnclude”timeh#ncude omp.h#

9、deineSIZE coninRSIZE 120;nt shuzuSIZERAYIZE;int xipix1ARAY_SIE;it iapaixu2RRY_SZ;i iaaixARRAY_IZE;itxiaiu4RAY_IE;ntzoganSIZARAY_SIE;it ongxuARRAY_SIZE*ZE;voi xiaohnsu(it,int , ntu) for (ini = l; i ;j-) if (Aj =j 1) int = ; Aj -1= Aj; A = z; /每个线程排序int min(in argc, ar* ag)nt1, 2; in i; nt id;lo_t now

10、_time,en_time;ra(10086); for (i i =0; i SIZE; i+) r( j = 0; ARRAY_SZE; j+) huuij = rand(); /随机生成数组nowtime= ock();#pragma mppaaeldeaul(none) sare(suzu,xapaxu1,xiopai,xiopaixu3,ipaixu4,ARAY_SIE)private(i) #prgmaom o fr (i 0; i ARRAYSIZ;i+)/这个fr循环是并行的,将数组分为四份 aopaix = uzi; xiaopx2i =shuzu1i; xiaoaxu3i

11、sh2i; xaoaxui = shuzu3i; #prgma m parlldefult(none)shd(xipaxu,aoax2,xiaopaix3,xiapaiu4,RRAYZE) pragma omp parllel ection pama ompecion xaohans(xaix,0, ARRY_SIZE-);/排序 #pragma ompsecion iaansu(xiapaix2, 0, ARRYSI);#praga ompsetin xiaohasu(xiapx3, 0,RRAY_SIE);pragmop sectn xiahans(xiaopaixu4,0, ARRYSI

12、E); fr ( = 0;i ARRY_IZE;+)/合到一份 zonghsh0=xiaopxu1i; znhanhui=xiaopui; onhashu2i=xiopix3i;zonashu3i=xpa4i;i timeZE; for (int i= 0; i=RSZE) = 0; ee ak = zonghashukARRAY_SIZE - tiek - 1; nt a0; for (nt i = 1;iSZE; +) f (aix) x = ai; r (int n=0; SIZE;n) i (x = an) ten= tmen 1; bak; ngpaixuj ; /归并end_tim

13、e= clock();double shijin = end_tm - nowime;o(i i = 0; SIZ*ARAY_SZE; i+)pintf(%d ”, zongaixui);pri(”所用时间:lf”,sijia / CK_TK);while (rue);四:实验结果与分析M:串行pi 1.2万2。4万 。6万 4。8万 6。0万 7。2万串行(秒)。41 766 3.91 6。7 10469 14876线(秒) 。029 108 .242 43 0。656 0。904线(秒) 。050。15 .33.15 .99 1.02线(秒) 0。19 0。50 1。082。003。11

14、4。1从表中可以看出4线程的时候,并行程序的速度是串行程序速度的十倍之多,而理论上大概倍.这就跟改的程序有关.在并行程序中,最后采用的是归并,由此,发生了这些奇妙的情况:实则本身的算法就比冒泡优一些,但又不能只采用冒泡算法,那样在最后又来个冒泡,其程序就没有意义了。Openp:这是4.8万个数排序的结果,可以看出用了2.876秒,比MI慢了四倍之多,这可能是程序的不合理,带来了多余的时间消耗(通信)。但比串行还是要快很多。五:结论(讨论)1、实验结论 、就这冒泡排序改为并行的,虽然时间缩短了很多倍,但与快排等排序算法并行相比,其速度又不堪入目。2、就冒泡排序而言,其mpi并行远远优于opnm(就我写的程序而言.。),虽然最后都用了并归。、讨论1、这些程序都实现在一台电脑上完成的,还未试过与其他电脑通信,所以其所表现出来的结果并不完全按正确,毕竟并行计算涉及到不同主机之间的通信。2、由于个人编程能力不高,在这里只讨论了一些时间上的差异,并未对空间上进行比对(不会。)。、就openmp程序而言,应该还可以改写,增加其通用性和减少通信六、教师评审教师评语实验成绩 签名: 日期:

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

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