版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京科技大学计算机与通信工程学院 实验报告 实验名称:冒泡排序的并行 学生姓名:卷处 专 业:计算机科学与技术 班 级:计1203 学 号:41255072 指导教师:李建江 实验成绩: 实验地点:机电楼301 实验时间:2015年4月8日 一、实验目的与实验要求 1、实验目的 (1) 学会将串行程序改为并行程序。 (2) 学会mpich2的使用。 (3) 学会openmp的配置。 (4) mpi与openmp之间的比较。 2、实验要求 (1) 将吊行冒泡程序局部并行化,以降低时间消耗。 (2) 理论上求出时间复杂度之比,根据结果得出时间消耗之比,进行比对分析。 二、实验设备(环境)及要求 V
2、s2013, mpich2 三、实验内容与步骤 实验一 mpi并行 (1) 实验内容 1、写出一个冒泡排序程序,求出苴时间复杂度,并运行得到相应的时间消耗。 2、将冒泡程序改为mpi并行程序:将全部需要排序的数分成4等份,分给四个进程一起 冒泡,最后将所得的结果归到一个进程,进行归并排序,得到结果,得到时间消耗。算岀 时间复杂度。 3、对得岀的结果进行讨论与分析。 (2) 主要步骤 1、串行冒泡程序 时间复杂度:取所要排序的数的个数为n个,时间复杂度为n*n/2o 代码实现: / maopao. cpp :定义控制台应用程序的入口点。 / include stdafx h Sinclude s
3、tdlib h #include,time hconst int ARRAY.SIZE = 120000; int main(int argc, char* argv) int zongshuARRAY_SIZE; srand(10086); now_time, end_time; for (int i = 0; i ARRAY.SIZE; i+) zongshui.二randO ; now_time = time(NULL); for (int i = 0; i i; j) if (zongshuj. = zongshuj - 1) int z = zongshuj - 1; zongshu
4、j 1 = zongshu.j; zongshuj: = z; end_time = time(NULL); long shijian = end_time - now_time; for (int i = 0; i ARRAY_SIZE; i+) printf (/r%d $ zongshui): printf C所用时间:%ld, shi jian); while (true); 2、并行程序 时间复杂度:取所要排序的数的个数为n个,进程数为m个。时间复杂度:(n/m) *(n/m)/2)+n+4*no 代码实现: / MPITest. cpp :宦义控制台应用程序的入口点。 / Sinc
5、lude stdafx h include mpi h include Sinclude iJinclude stdlib h = 0; define SIZE 4/进程数 const int ARRAY.SIZE = 30000;/每个进程分配的个数 int shuzuSIZEARRAY.SIZE; int zonghanshuSIZEARRAY.SIZE: double endwtime; void Scatter(int); int main(int argc, char *argv) int myid; MPI_Init( MPI.Comm.rank(MPI.COMM.WORLD, M
6、PI.FinalizeO ; void Scatterl(int myid) int numtasks: srand(100S6); for (int i = 0; i SIZE; i十十) for (int j = 0; j ARRAY.SIZE; j+十) shuzuti j = randO : /随机生成数组 int xiaopaixuZARRAY_SIZE; double startwtime = MPI_Wtime(); MPI_Comm_size (MP I _CORLD, finximtasks); if (numtasks = SIZE) PI_Scatter(shuzu, A
7、RRAY.SIZE, MPI.INT, xiaopaixu, ARRAY.SIZE, MPI.INT, 0, MPI_COMM_WORLD); for (int i = 0; i i; jT if (xiaopaixuEj = xiaopaixuEj - 1) int z = xiaopaixutj - 1; xiaopaixuEj - 1 = xiaopaixu.j; xiaopaixuEj = z; /每个进程里的冒泡排序 PI_Gather(xiaopaixu, ARRAY.SIZE, MPI.INT, zonghanshu, ARRAY.SIZE, MPI.INT, 0 MPI_COM
8、M_WORLD); int time1SIZE: for (int i = 0; i = 0; j) for (int k = 0; k = ARRAY.SIZE) ak = 0; else ak = zonghanshuk ARRAYSIZE 一 timek - 1; int x = a0: for (int i = 1; ix) x = ai; for (int n = 0; n SIZE; n+) if (x = an) time _n = timen + 1: break; zongpaixu2jZ = x; endwtime = MPI_Wtime(); if (myid); els
9、e for (int i = 0; i SIZE*ARRAY_SIZE; i+) printf C%d , zongpaixu2i): if (myid); else printf(wall clock time=% fn endwtime startwtime): 2、实验2 在实验一的基础上将程序改为openmp。 代码实现:(水平不高,写的程序通用性不好,只写了四线程的) / Openmp. cpp :定义控制台应用程序的入口点。 / Sinclude stdafxh include Sinclude mathh Sinclude stdlib h ifinclude time h in
10、clude omph define SIZE 4 const int ARRAY_SIZE = 12000; int shuzuSIZEARRAY.SIZE; int xiaopaixulCARRAY_SIZEZ; int xiaopaixu2ARRAY_SIZE; int xiaopaixu3ARRAY_SIZE; int xiaopaixulCARRAY_SIZE2: int zonghanshuCSIZEARRAY.SIZE: int zongpaixuARRAY_SIZE*SIZE; void xiaohansu(int int 1, int u) for (int i = 1; i
11、i; j) if(Aj = Aj - 1) int z = Aj - 1; Aj - 1 = Aj; Aj = z; /每个线程排序 int main(int argc, char* argv) int tl, t2; int i; int id; clock_t now_timet end_time; srand(10086); for (int i = 0; i SIZE; i卄) for (int j = 0; j ARRAY.SIZE; j+十) shuzui L j = randO ; /随机生成数组 now_time = clockO : pragma omp parallel d
12、efault(none) shared(shuzu, xiaopaixul, xiaopaixu2, xiaopaixu3, xiaopaixul, ARRAY_SI2E) private(i) i?pragma omp for for (i = 0; i ARRAY.SIZE; i+)/这个循坏是并行的将数组分为四份 xiaopaixuli. = shuzu.O i: xiaopaixu2iZ = shuzull i: xiaopaizu3i_ =shuzuZ2 i; xiaopaixu-lEi. =shuzuZ3 i; omp parallel default(none) pragma s
13、hared(xiaopaixul, xiaopaixu2, xiaopaixu3, xiaopaixu4, ARRAY_SIZE) iJpragma omp parallel sections iJpragma omp section xiaohansu(xiaopaixul, 0, ARRAY.SIZE-l) ;/排序 pragma omp section xiaohansu(xiaopaixu2, 0, ARRAY.SIZE); iJpragma omp section xiaohansu(xiaopaixu3, 0, ARRAY.SIZE); iJpragma omp section x
14、iaohansu(xiaopaixu4, 0, ARRAY.SIZE); for (i = 0; i ARRAY.SIZE; i+)/合到份 zonghanshu.0i=xiaopaixuli; zonghanshuli=xiaopaixu2i; zonghanshu2i=xiaopaixu3i; zonghanshu.3i=xiaopaixu4i; int time.SI2E; for (int i = 0; i = 0; j) for (int k = 0; k = ARRAY.SIZE) ak = 0; else ak = zonghanshukARRAY_SIZE - timek -
15、1: int x = a0; for (int i = 1; ix) x = ai; for (int n = 0; n SIZE; n+) if (x = an) timen = timen + 1; break; zongpaixu.j = x; 归并 end_time = clockO : double shijian = end_time - now_time; for (int i = 0; i 8? 3268? 3268? 3269B 326?B 3269刃 32691 32691 326?2 52672 32672 326?2 326?2 326? 2 32693 32693 3
16、2693 32693 32693 32693 32694 32694 326-94 326.95 3236 3267 32697 J2697 326*97 326?7 32697 32697 32698 32698 32699 32699 3269? 32700 32700 327J30 32 ?01 32701 32701 32701 32701 32702 32703 32703 32703 32703 32704 32704 32704 3270 4 92油5 3206 3270532?S 327S 3270S 370532706 327M6 327% 327&6 J2706 32706
17、 32767 32707 32707 32708 32708 32708 32709 3270? 32709 32789 32709 32 710 32710 32710 32710 32711 32711 32711 32711 32712 32712 32712 32712 32712 3271 2 32712 32712 32713 32713 32713 32713 32713 3Z714 32714 32714 32714 32714 32715 12716 32716 32717 32717 32717 32718 32718 32718 3271 2271 3271 32719
18、32720 32 720 32720 32720 32721 32721 32721 32721 32721 32722 32722 32723 32723 32723 3272 )32724 32724 32724 32724 32724 32725 32725 3Z725 32725 32725 32725 3272S 32726 S2726 32726 32726 32726 32726 32726 32727 32728 3272S 32?2? 32?2? 32730 32730 32 ?30 32730 32730 32731 32732 32732 32733 32734 3273
19、4 32734 32734 32734 32735 3273 3273G 3273G 32726 32736 32736 32737 32737 32737 32737 32737 32738 32728 32738 J2739 32739 3273? 32740 3274 32740 32741 32741 32741 32741 32741 32741 32742 32 742 32742 32742 32742 32742 32742 32743 32743 32743 工2744 32244 32744 32745 3274 5 32745 32745 32745 32746 3274
20、6 32745 32747 32747 32747 32747 32747 32748 32748 J2748 32748 32749 3274*9 327S0 327S0 327S0 327S0 32750 32750 327S1 327S1 327S2 32 ?52 32752 32752 32752 32753 32753 32754 32754 32754 32755 32755 32756 32756 3275 6 327S6 32756 32757 32757 32757 32757 32757 3275S 32758 32758 32758 32759 32759 J27G0 3
21、2760 32760 32761 32761 32761 32761 327L2 32762 32762 32762 32763 92763 32 763 32763 32763 32763 32764 32764 32764 32765 32765 32765 32765 3Z765 32766 32 i 32766 32767 32762 vail clotlc 七丈冲4.XB5P61, 12万 24万 36万 4.8万 6.0万 72万 串行(秒) 0.441 1.766 3.951 6.877 10.469 14.687 6线(秒) 0.029 0.108 0.242 0.435 0.
22、656 0.940 4线(秒) 0.035 0.151 0.339 0.615 0.969 1.409 2线(秒) 0.119 0.502 1.108 2.040 3.121 4.516 从表中可以看出4线程的时候,并行程序的速度是串行程序速度的十倍之 多,而理论上大概8倍。这就跟改的程序有关。在并行程序中,最后釆用的是归 并,由此,发生了这些奇妙的情况:实则本身的算法就比冒泡优一些,但乂不能 只采用冒泡算法,那样在最后乂来个冒泡,其程序就没有意义了。 Openmp: H:binxingo pnOpe nmpDe bu gO pen nn p. exe 30506 39S15 305-16 3
23、8S16. 30516- 30518 39533 30548 3OS40 36542 30543 30552 3056.2 30 579 305 85 305?1 3059 3 30601 3:0684 3361.3 36617 3061 30618 30&20 30620 306 2 0 3962 B 3929 30631 J06*10 390 306-48 30648 30658 30650 3%50 30650 306S5 30661 30661 20663 30663 3K66 39669 3067? 30721 39735 30752 3F76J 3B76? 30767 30778
24、J 9799 30 3B78H :T2 3B782 30789 38794 38796 3B7Vt 30796 3079fc 38796 3(*819 3B8JB 3MHf V 3B869 3IM6? 30882 3B8823BB90 30921 30926 3B?28 38Y34 30?-1b ;IH95? 3095? 38966 399% 3W79 3B979 3098& 38990 30995 3B995 30996 316B7 31050 310G1 31BG2 31 B62 31975 31B76- 31078 31883 31083 31983 31?0 31090 J1B97 J
25、I 028 31106 31108 3111 B 31110 31126 31126 31134 31140 31142 31145 31176 31204 31204 31216 31217 31225 31226 31226 31226 31233 3124? 31268 31272 31?2 3127? 3127? 31292 31295 312?8 31 298 31299 31299 31306 31321 31321 31322 31323 31325 31345 31398 31398 31401 3HO 2 31426 31133 31458 31163 31463 31468
26、 31-17-1 3M86 31186 318 3H8 31198 3H92 31504 31S19 315.21 31S3O 31530 31S31 31537 31&S1 31S72 31564 31585 31&(H 316K 31 金 16 31637 31637 J1647 31647 31649 316S0 31S2 31652 )1652 316S7 31661 31664 3167 31679 31764 51725 31733 317J9 3i74& 31745 3:i751 317S9 3175 31%4 3177 31798 31805 31805 31806 31824 31824 31838 31842 31842 3145 31851 31862 31867 31872 31 B84 31886 3188: 31895 3897 3:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度高端装备制造与出口承包合同3篇
- 全国清华版信息技术小学五年级上册新授课 第6课 蜻蜓点水 -制作动作渐变动画 说课稿
- Unit 2 Different families Part A Lets talk(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2025年度肉牛产业链绿色低碳发展项目买卖合同3篇
- Unit 1 Science and Scientists Discovering Useful Structures(说课稿+学案) 高中英语同步备课系列人教版2019选择性必修第二册
- 第五单元第二课《说说电话》(说课稿)-2023-2024学年三年级下册综合实践活动广州版
- 人教版七年级历史与社会下册:6.2.1 水乡孕育的城镇说课稿
- 26手术台就是阵地说课稿-2024-2025学年三年级上册语文统编版
- 全国川教版信息技术八年级下册第三单元第1节《数据与数据分析》说课稿
- 2025年投标保证金合同范本撰写与示范案例6篇
- 钢材压延加工生产技术
- 农村教师政协提案范文
- JT-T 1495-2024 公路水运危险性较大工程专项施工方案编制审查规程
- 2024年高级养老护理员职业鉴定考试题库大全-下(多选、判断题)
- 数学学科的重要性与应用
- 【阅读提升】部编版语文五年级下册第二单元阅读要素解析 类文阅读课外阅读过关(含答案)
- 病理科医院感染控制
- 购销合同电子版完整版
- 福建省福州市延安中学2023-2024学年八年级上学期期末物理模拟试卷+
- 2024年度医院肝胆外科实习生带教计划课件
- 微机原理与接口技术考试试题及答案(综合-必看)
评论
0/150
提交评论