并行计算课程设计报告

上传人:汽*** 文档编号:562381601 上传时间:2023-05-26 格式:DOC 页数:46 大小:468.04KB
返回 下载 相关 举报
并行计算课程设计报告_第1页
第1页 / 共46页
并行计算课程设计报告_第2页
第2页 / 共46页
并行计算课程设计报告_第3页
第3页 / 共46页
并行计算课程设计报告_第4页
第4页 / 共46页
并行计算课程设计报告_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《并行计算课程设计报告》由会员分享,可在线阅读,更多相关《并行计算课程设计报告(46页珍藏版)》请在金锄头文库上搜索。

1、并行计算与多核多线程技术课程报告 专业 班级 学号 姓名 成绩 _ 年 月 日课程报告要求手写内容:设计目的、意义,设计分析,方案分析,功能模块实现,最终结果分析,设计体会等。 允许打印内容:设计原理图等图形、图片,电路图,源程序。硬件类的设计,要有最终设计的照片图;软件类设计,要有各个功能模块实现的界面图、输入输出界面图等。评 价理论基础实践效果(正确度/加速比)难度工作量独立性目 录1. 设计目的、意义(功能描述)12. 方案分析(解决方案)13. 设计分析13.1 串行算法设计13.2 并行算法设计13.3 理论加速比分析24. 功能模块实现与最终结果分析24.1 基于OpenMP的并行

2、算法实现24.1.1 主要功能模块与实现方法24.1.2 实验加速比分析24.2 基于MPI的并行算法实现24.2.1 主要功能模块与实现方法24.2.2 实验加速比分析24.3 基于Java的并行算法实现34.3.1 主要功能模块与实现方法34.3.2 实验加速比分析34.4 基于Windows API的并行算法实现34.4.1 主要功能模块与实现方法34.4.2 实验加速比分析34.5 基于.net的并行算法实现34.5.1 主要功能模块与实现方法34.5.2 实验加速比分析34.6并行计算技术在实际系统中的应用44.6.1 主要功能模块与实现方法44.6.2 实验加速比分析55. 设计体

3、会56. 附录66.1 基于OpenMP的并行程序设计66.1.1 代码及注释66.1.2 执行结果截图66.1.3 遇到的问题及解决方案66.2 基于MPI的并行程序设计76.1.1 代码及注释76.2.2 执行结果截图76.2.3 遇到的问题及解决方案76.3 基于Java的并行程序设计86.3.1 代码及注释86.3.2 执行结果截图86.3.3 遇到的问题及解决方案96.4 基于Windows API的并行程序设计96.4.1 代码及注释96.4.2 执行结果截图106.4.3 遇到的问题及解决方案106.5 基于.net的并行程序设计116.5.1 代码及注释116.5.2 执行结果

4、截图116.5.3 遇到的问题及解决方案116.6并行计算技术在实际应用系统的应用156.6.1 代码及注释156.6.2 执行结果截图156.6.3 遇到的问题及解决方案151. 设计目的、意义(功能描述)设计一个计算向量夹角的WinForm窗体应用,用户只需要在窗体上输入向量的维度,系统随机产生两个向量并将计算结果显示在窗体上。求两个n维向量的夹角,要用到求向量夹角的数学公式,当向量维度较小时计算量不大,而当维度过大时特别是百万级甚至千万级别的时候计算量就很大了,用并行计算求向量夹角,可以将任务分配给多个处理器,减小运算时间。所以要设计一个并行计算夹角的方法,提高计算速度,把并行和串行计算

5、时间做个比较显示在窗体上。窗体应用比控制台程序更方便用户操作,简单直观,页面也更加友好。2. 方案分析(解决方案)定义两个数组分别存放两个向量,用for循环将产生的随机数赋值给数组。假设有两个向量X,Y X=(x1,x2,xn),Y=(y1,y2,yn)计算X,Y夹角的公式是:cos(X,Y)=XY/(|X|Y|)=(x1y1+x2y2+xnyn)/(x1+x2+xn)1/2(y1+y2+yn)1/2。由3个for循环分别实现求向量积和两个向量的模,最后用公式计算即可。3. 设计分析3.1 串行算法设计输入:向量的维度n输出:两个随机向量的夹角syy_angleBegin给存放向量的数组动态分

6、配内存空间For i=0 to i=n-1 do 产生随机数给数组x赋值endForFor i=0 to i=n-1 do产生随机数给数组y赋值endForFor i=0 to i=n-1 do 计算向量积endForFor i=0 to i=n-1 do计算向量X模endForFor i=0 to i=n-1 do 计算向量Y模endFor利用公式计算夹角End3.2 并行算法设计输入:向量的维度n输出:两个随机向量的夹角syy_angleBegin给存放向量的数组动态分配内存空间For i=0 to i=n-1 do 产生随机数给数组x赋值endForFor i=0 to i=n-1 do

7、产生随机数给数组y赋值endFor3个for循环串行执行,每个for循环由p个核并行执行:p个核同时执行第一个for循环For i=0 to i=n-1 do 计算向量积endForp个核同时执行第二个for循环For i=0 to i=n-1 do计算向量X模endForp个核同时执行第三个for循环For i=0 to i=n-1 do 计算向量Y模endFor利用公式计算夹角End3.3 理论加速比分析设加速比为S,串行运行时间为Ts,并行的运行时间为Tp。假设一次运算作为一个时间单位,对于串行算法来说其时间复杂度为O(n) 即Ts=O(n) ,对于并行算法来说,由于有p个处理器同时运行

8、,则其时间复杂度为O(n/p) 即Tp=O(n/p) ,所以理论加速比S=Ts/Tp=O(n)/O(n/p)=p。4. 功能模块实现与最终结果分析4.1 基于OpenMP的并行算法实现4.1.1 主要功能模块与实现方法1:向量x,y赋值,用产生的随机数对存放向量的数组赋值,得到两个随机向量srand(int)time(0);/数组X赋值for(i=0;in;i+) j=(int)(100*rand()/(RAND_MAX+1.0); /随机产生的数xi=j; /数组Y赋值for(i=0;in;i+) j=(int)(100*rand()/(RAND_MAX+1.0); /随机产生的数yi=j;

9、 2:计算向量积,向量x,y的模用并行实现。设置两个线程,用reduction实现并行计算,两个线程都会创建一个reduction变量的私有副本,在OPENMP区域结束后,将各个线程的计算结果相加赋值给原来的变量。#pragma omp parallel for reduction(+:syy_outer_product)for(i=0;in;i+)syy_outer_product=syy_outer_product+xi*yi;/计算向量积计算向量X,Y的模方法与上面类似4.1.2 实验加速比分析线程数设置为2时,向量维数小时,由于精度问题,运行时间显示为0,加速比无法计算。向量维数到达百

10、万级以上,加速比介于1到2之间,根据向量维数的变化,加速比有一定的变化但不会超过范围。4.2 基于MPI的并行算法实现4.2.1 主要功能模块与实现方法使用MPI群集通信,由0进程接收输入的数组长度n,给数组动态分配内存后,用产生的随机数给数组赋值。用MPI_Bcast先将数组长度广播给其他进程,由其他进程给数组动态分配内存后,再将数组值广播给其他进程。求向量积,向量模的for由多个进程同时执行,将0到n-1次循环分配给P个进程,每个进程从i=myid开始执行,循环一次i加进程数。将每个进程的计算结果用MPI_Reduce函数规约。1:由0进程进行随机数组动态分配内存和赋值操作if(myid=

11、0)/为数组x,y动态分配空间x = (int*)malloc(n * sizeof(int);y = (int*)malloc(n * sizeof(int);srand(int)time(0);/数组X赋值for(i=0;in;i+) j=(int)(10*rand()/(RAND_MAX+1.0); /随即产生的数xi=j; 数组y赋值同上starttime=MPI_Wtime();2:用MPI_Bcast()函数将数组长度和值广播给其他进程MPI_Bcast(&n,1,MPI_LONG,0,MPI_COMM_WORLD);/将n值广播出去MPI_Bcast(x,n,MPI_INT,0,

12、MPI_COMM_WORLD);/将x值广播出去MPI_Bcast(y,n,MPI_INT,0,MPI_COMM_WORLD);/将y值广播出去3:用MPI_Reduce()函数对各个进程的计算结果规约MPI_Reduce(&my_product,&syy_outer_product,1,MPI_LONG_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); MPI_Reduce(&my_mol_x,&syy_mol_x,1,MPI_LONG_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);MPI_Reduce(&my_mol_y,&syy_mol_y,1,MP

13、I_LONG_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);4:多个进程同时执行for循环for(i=syy_myid;in;i+=syy_numprocs) product+=xi*yi;/计算向量积计算向量x,y模与上面类似5:串行部分由0进程完成,在执行完并行计算后,再由0进程单独完成串行操作. if(syy_myid=0 )里执行的串行操作4.2.2 实验加速比分析并行时间比串行时间要长,加速比低于1,MPI并行是进程间相互通信传递数据。设置两个进程时,在0进程里输入向量维度,由0进程对向量数组赋值。再将n值和x,y动态数组广播给其他进程。串行计算只有0进程独立完成

14、,可能是进程间通信过多使并行额外开销太大。4.3 基于Java的并行算法实现4.3.1 主要功能模块与实现方法1:继承Thread类,创建两个线程thread1,thread2。用start方法开始线程。使用join()方法等待线程结束后再继续执行。javaand thread1=new javaand(0,n,x,y);javaand thread2=new javaand(1,n,x,y);startTime=System.currentTimeMillis();thread1.start();thread2.start();thread1.join();thread2.join();2:两个线程同时执行run函数,thr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号