OpenMP 编程基础

OpenMP 编程基础

ID:47020573

大小:538.77 KB

页数:16页

时间:2019-06-16

OpenMP 编程基础_第1页
OpenMP 编程基础_第2页
OpenMP 编程基础_第3页
OpenMP 编程基础_第4页
OpenMP 编程基础_第5页
资源描述:

《OpenMP 编程基础》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验1openMP计算PI一、实验内容在VS环境下使用openMP让程序并行化执行计算PI的指值。并且掌握有关openMP程序设计的基本知识,并行程序设计的原理方法。二、实验原理OpenMPOpenMP应用编程接口API是在共享存储体系结构上的一个编程模型,其包含:编译制导(CompilerDirective)、运行库例程(RuntimeLibrary)和环境变量(EnvironmentVariables)三大部分,并支持增量并行化(IncrementalParallelization),用于实现并行性运算的优化解决方法。OpenMP基于fork-join的编程模式而设计

2、。OpenMP程序起初以一条单线程的形式开始运行。如果希望在程序中利用并行,那么就需将额外的线程进行分支,以创建线程组。这些线程在称为“并行区域”的代码区域内并行执行。在并行区域末尾,将等待所有线程全部完成工作,并将其重新结合在一起。那时,最初线程或“主”线程将继续执行,直至遇到下一个并行区域(或程序结束)。PI的计算方法:利用:0111+x*xdx来计算PI的值。三、实验过程和结果程序代码://PI.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include#include#include"time.h"

3、int_tmain(intargc,_TCHAR*argv[]){longlongstep=1000000000;doubletemp,sum=0.0,PI;doubleper=1.0/(double)step;clock_tstart,stop;start=clock();inti;#pragmaompparallelforprivate(temp)reduction(+:sum)num_threads(4)for(i=0;i

4、clock();printf("PI=%15.12f",PI);printf("Runtime:%f",(double)((stop-start)/1000));return0;}程序执行结果:通过#pragmaompparallelforprivate(temp)reduction(+:sum)num_threads(num)设置并行num个线程并行执行语句块,然后对sum进行规约,得出计算结果,以下是线程数num对应的执行时间和PI的结果:a)Num=1b)Num=2c)Num=4a)Num=8二、分析与讨论通过设置多个线程并行执行PI的计算可以发现,刚开始的

5、时候随着线程数的增加程序执行所花费的时间慢慢的减少,但是线程数增加到一定的数目时,程序执行时间不再增加。讨论:刚开始的时候程序执行的时间随着线程数的增加而减少,但是不是成比例减少的,我认为这个过程因为多个线程的通信还有开销,这个开销是不能减小的,而且线程数开的越多,这个开销越大(但是这个程序中的线程之间的开销很小)。后来线程数增长到一定数目时,计算PI时间不再减少,这个应该是因为CPU线程调度,CPU的利用率达到了一个极值,所以再增加线程数也没有效果。实验二MPI快速排序一.实验目的本实验的目的是通过练习掌握分布存储并行编程的知识和技巧。l了解并行算法的设计方法l掌握MP

6、I并行程序编写的基本步骤l掌握MPI编程环境和工具的使用二.实验原理(一)、MassagePassingInterface:是消息传递函数库的标准规范,由MPI论坛开发,支持Fortran和C(1)一种新的库描述,不是一种语言。共有上百个函数调用接口,在Fortran和C语言中可以直接对这些函数进行调用(2)MPI是一种标准或规范的代表,而不是特指某一个对它的具体实现(3)MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准(二)、MPI基本数据类型(三)、MPI函数1、首先一个最重要的函数是intMPI_Init(int*argc,char**argv)

7、MPI_INIT(IERROR)–MPI_INIT是MPI程序的第一个调用,它完成MPI程序的所有初始化工作。所有的MPI程序的第一条可执行语句都是这条语句。–启动MPI环境,标志并行代码的开始.–并行代码之前,第一个mpi函数(除MPI_Initialize()外).–要求main必须带参数运行,否则出错.其次是MPI结束-MPI_FINALIZEintMPI_Finalize(void)MPI_FINALIZE(IERROR)–MPI_FINALIZE是MPI程序的最后一个调用,它结束MPI程序的运行,它是MPI程序的最后

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。