openmp 入门 - 专题开发-技术-项目 - 多核软件开发

openmp 入门 - 专题开发-技术-项目 - 多核软件开发

ID:18128080

大小:1.63 MB

页数:59页

时间:2018-09-14

openmp 入门 - 专题开发-技术-项目 - 多核软件开发_第1页
openmp 入门 - 专题开发-技术-项目 - 多核软件开发_第2页
openmp 入门 - 专题开发-技术-项目 - 多核软件开发_第3页
openmp 入门 - 专题开发-技术-项目 - 多核软件开发_第4页
openmp 入门 - 专题开发-技术-项目 - 多核软件开发_第5页
资源描述:

《openmp 入门 - 专题开发-技术-项目 - 多核软件开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、OpenMP入门·楼主发表于:2008-05-1216:48:04OpenMP是一个业界的标准,很早以前就有了,只是近一段时间才逐渐热起来。我们可以在C/C++和Fortran使用OpenMP、很容易的引入多线程。qOpenMP目前的标准是2.5,3.0马上也要通过了。官方网站www.openmp.org上有你需要知道的一切信息,包括OpenMP规范文档。下图是一个典型的OpenMP程序的示意图,我们可以看到它是由串行代码和并行代码交错组成的,并行代码的区域我们把它叫做“并行区”。主线程一旦进入并行区,就自动产生出多个

2、线程,来并行的执行。怎样在我们的代码中使用OpenMP呢?很简单,拿我们常用的C/C++代码来说,只需要插入如下pragma,然后我们选择不同的construct就可以完成不同的功能。回复次数:97··intel_jeff·(Jeff@英特尔欢迎到"英特)··等 级:·#1楼得分:0回复于:2008-05-1216:54:03首先,我们来看一下如何创建一个并行区:增加一行代码#pragmaompparallel,然后用花括号把你需要放在并行区内的语句括起来,并行区就创建好了。并行区里每个线程都会去执行并行区中的代码。那

3、么怎么来控制并行区中线程的数量呢?默认情况下,并行区内线程数=系统中核的个数。如果你需要修改,方法之一是设置环境变量。下一节我们将看一个最简单的OpenMP代码,看看并行区是怎样工作的(待续。。。)···intel_jeff·(Jeff@英特尔欢迎到"英特)··等 级:·#3楼得分:0回复于:2008-05-1311:16:47我们来看一个最简单的OpenMP程序例子:===================================#includeintmain(){ #pragmaomppar

4、allel { inti; printf("HelloWorld"); for(i=0;i<6;i++) printf("Iter:%d",i); } printf("GoodByeWorld");}===================================我们现在用Intel编译器来编译这个小程序,当然你也可以用VS2005来编译。我们可以看到编译器在没有加/Qopenmp开关的时候,会忽略掉所有openmppragma。我们可以利用这个特性来检查你的代码在串行的时候运行结果是否正确。D:t

5、est>icl/nologoHelloWorlds.cHelloWorlds.cHelloWorlds.c(4):warning#161:unrecognized#pragma #pragmaompparallel ^串行代码执行的结果如下:D:test>HelloWorlds.exeHelloWorldIter:0Iter:1Iter:2Iter:3Iter:4Iter:5GoodByeWorld下面我们加上/Qopenmp开关重新编译,我们会看到编译器给出提示说已经把并行区给做并行化了。D:test>icl/n

6、ologo/QopenmpHelloWorlds.cHelloWorlds.cHelloWorlds.c(4):(col.5)remark:OpenMPDEFINEDREGIONWASPARALLELIZED.我的机器是4核,运行这个程序就打印出如下结果。我们可以看到每次运行打印出来的东西顺序是不一定的,这个符合多线程程序的特性。在4核的机器上,并行区内就产生了4个线程同时执行for循环打印,默认线程数=核的个数。D:test>HelloWorlds.exeHelloWorldIter:0Iter:1Iter:2It

7、er:3Iter:4Iter:5HelloWorldIter:0HelloWorldIter:0Iter:1Iter:2Iter:3Iter:4Iter:5HelloWorldIter:0Iter:1Iter:1Iter:2Iter:2Iter:3Iter:3Iter:4Iter:4Iter:5Iter:5GoodByeWorld我们来修改一下线程的数量,然后再运行一下代码,看下运行结果D:test>setOMP_NUM_THREADS=2D:test>HelloWorlds.exeHelloWorldIter:0

8、Iter:1Iter:2Iter:3Iter:4Iter:5HelloWorldIter:0Iter:1Iter:2Iter:3Iter:4Iter:5GoodByeWorldD:test>现在我们对并行区有了一定的了解,并行区里每个线程执行的代码是一样的,做的事情似乎也是一样的,但是实际工作中,我们希望把一部分工作分配给不同线

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

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

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