基于openMP的并行计算实验.doc
《基于openMP的并行计算实验.doc》由会员分享,可在线阅读,更多相关《基于openMP的并行计算实验.doc(9页珍藏版)》请在课桌文档上搜索。
1、-并行计算实验报告课程:并行计算实验一:OpenMP根本使用一、实验目的1、熟悉OpenMP编程。2、比拟串行算法与并行算法在执行时间上的差异;3、考察线程数目使用不同对并行算法执行时间的影响;4、考察运算规模N对串、并行算法执行时间上的影响。二、实验容1、使用OpenMP进展两个矩阵A和B的加法,并分析串行、并行时间的差异以及问题规模对程序运行时间的影响三、实验步骤1、整个程序的设计流程全局变量设置三个宏定义过的sizesize的二维数组啊a,b,c。初始化a数组为全1,b数组为全2通过omp_set_num_threads()库函数设置线程数调用openMP库函数omp_get_wtime
2、()获取当前时间start #pragma omp parallel for开场做并行区局部 完毕后再次调用omp_get_wtime()获取时间end,end-start即为并行消耗时间再次调用时间函数更新strat串行做一边矩阵相加更新end,end-start即为串行耗时代码如下:#include#include#define size 10000using namespace std;intasizesize,bsizesize,csizesize;int main() for(int i=0;i!=size;+i) /initial the matrixfor(int j=0;j!=
3、size;+j) aij=1;bij=2;double start=omp_get_wtime();omp_set_num_threads(4);#pragma omp parallel forfor(int i=0;isize;+i)for(int j=0;jsize;+j)cij=aij+bij;double end=omp_get_wtime(); cout并行运行时间:end-startendl;start=omp_get_wtime();for(int i=0;isize;+i)for(int j=0;jsize;+j)cij=aij+bij;end=omp_get_wtime();
4、cout串行运行时间:end-startendl;system(pause);2、问题规模对串、并行程序时间的影响(A、B矩阵的大小为N*M)(1)通过不断增加问题规模,观察串行和并行程序的执行时间,得到如下表格的时间消耗数据:100*1001000*100010000*10000串行消耗(ms)0.034.36296.91并行消耗(ms)7.069.54182.27(2)可以发现,当矩阵规模较小时,串行算法仍然要比并行算法运行的快,当规模到达一定程度的时候,并行运行的速度较串行有了提升。并行算法对各个CPU的调度也占用一定的时间,当问题规模很小的时候,这个调度时间占了很大的比重,而在规模较大
5、的时候,这个调度时间就显得微乎其微了3、线程数目对并行程序的影响这里假设问题规模为:N*M=10000*10000(1)在使用OpenMP进展并行执行矩阵加法时,我们可以自由设置进展并行计算的并行线程数目。(2)在并行区域中,通过函数int omp_set_num_threads(int)设置并行区域中要创立的线程数,分别设置为2、4、8、16,得到如下表格的时间消耗24816并行消耗(ms)262.73205.12248.97295.38(3)观察发现,在问题规模不变的前提下,随着线程数目的增加,问题解决的时间也在相应的减少。但是,问题消耗的时间并不会随着线程数目的增加而不断的减少,原因可能
6、是因为,随着线程数目的增减,线程的额外准备时间开销也将扩大。四、心得体会通过本次实验,了解了openMP库函数,掌握了openMP最根本的多线程程序编写。通过分析比拟串并行运行时间,体会了不同规模下串并行的使用效果。实验二:使用OpenMP实现圆周率计算的并行算法一、 实验目的1、 考察问题规模N对圆周率计算准确度的影响;2、 考察线程数目对圆周率计算执行时间的影响;3、比拟串、并行算法在执行时间上的差异。二、实验容1、使用OpenMP和近似计算公式计算圆周率的大小,并分析串行、并行时间的差异以及问题规模对程序运行时间的影响三、实验步骤1、整个程序的设计流程全局变量设置宏size,用来描述计算
7、围利用如下公式准备计算圆周率的近似值通过omp_set_num_threads()库函数设置线程数调用openMP库函数omp_get_wtime()获取当前时间start#pragmaompparallelforreduction(+:sum)开场做并行区局部注意:其中sum是共享的,因为是个连续和的问题,采用reduction之后,每个线程根据reduction+: sum的声明算出自己的sum,然后再将每个线程的sum加起来。防止各个线程共享sum资源时出现问题完毕后再次调用omp_get_wtime()获取时间end,end-start即为并行消耗时间再次调用时间函数更新strat串行
8、做一边矩阵相加更新end,end-start即为串行耗时代码如下:#include#include#definesize10000000usingnamespacestd;intmain()doublesum=0,start,end;omp_set_num_threads(4);start=omp_get_wtime();#pragmaompparallelforreduction(+:sum)for(inti=0;isize;+i)sum+=4/(1+(0.5+i)/size)*(0.5+i)/size)*1/size;end=omp_get_wtime();cout并行时间:end-sta
9、rtendl;sum=0;start=omp_get_wtime();for(inti=0;isize;+i)sum+=4/(1+(0.5+i)/size)*(0.5+i)/size)*1/size;end=omp_get_wtime();cout串行时间:end-startendl;cout.precision(20);cout:sumendl;system(pause);2、问题规模对串、并行程序时间的影响(N的大小影响时间)(1)通过不断增加问题规模,观察串行和并行程序的执行时间,得到如下表格的时间消耗数据:100010000010000000串行消耗(ms)0.044.10365.70
10、并行消耗(ms)4.6015.04188.48(2)可以发现,当规模较小时,串行算法仍然要比并行算法运行的快,当规模到达一定程度的时候,并行运行的速度较串行有了提升。并行算法对各个CPU的调度也占用一定的时间,当问题规模很小的时候,这个调度时间占了很大的比重,而在规模较大的时候,这个调度时间就显得微乎其微了3、线程数目对并行程序的影响这里假设问题规模为:N=100000(1)在使用OpenMP进展并行执行运算时,我们可以自由设置进展并行计算的并行线程数目。(2)在并行区域中,通过函数int omp_set_num_threads(int)设置并行区域中要创立的线程数,分别设置为2、4、8、16
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 openMP 并行 计算 实验

链接地址:https://www.desk33.com/p-14153.html