OpenMP程序设计

OpenMP程序设计

ID:37849536

大小:197.00 KB

页数:13页

时间:2019-06-01

OpenMP程序设计_第1页
OpenMP程序设计_第2页
OpenMP程序设计_第3页
OpenMP程序设计_第4页
OpenMP程序设计_第5页
资源描述:

《OpenMP程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、OpenMP程序设计¡什么是OpenMP应用编程接口API(ApplicationProgrammingInterface)由三个基本API部分(编译指令、运行部分和环境变量)构成是C/C++和Fortan等的应用编程接口¡OpenMP使用Fork-Join并行执行模型编译制导OpenMP的#pragma语句的格式为#pragmaompdirective_name…#pragmaomp制导指令前缀。对所有的OpenMP语句都需要这样的前缀。directive-nameOpenMP制导指令。在制导

2、指令前缀和子句之间必须有一个正确的OpenMP制导指令。并行域结构¡并行域中的代码被所有的线程执行¡具体格式#pragmaompparallel[clause[[,]clause]…]newline¡并行域中的代码被所有的线程执行¡具体格式#pragmaompparallel[clause[[,]clause]…]newline共享任务结构¡共享任务结构将它所包含的代码划分给线程组的各成员来执行并行for循环并行sections串行执行for编译制导语句¡for语句指定紧随它的循环语句必须由线程

3、组并行执行;¡语句格式#pragmaompfor[clause[[,]clause]…]newlineSections编译制导语句¡sections编译制导语句指定内部的代码被划分给线程组中的各线程¡不同的section由不同的线程执行¡Section语句格式:#pragmaompsections[clause[[,]clause]…]newline{[#pragmaompsectionnewline]…[#pragmaompsectionnewline]…}single编译制导语句¡singl

4、e编译制导语句指定内部代码只有线程组中的一个线程执行。¡线程组中没有执行single语句的线程会一直等待代码块的结束,使用nowait子句除外¡语句格式:#pragmaompsingle[clause[[,]clause]…]newline组合的并行共享任务结构parallelfor编译制导语句¡Parallelfor编译制导语句表明一个并行域包含一个独立的for语句¡语句格式¡#pragmaompparallelfor[clause…]newlineparallelsections编译制导语句

5、¡parallelsections编译制导语句表明一个并行域包含单独的一个sections语句¡语句格式#pragmaompparallelsections[clause…]newline下面对以上编译制导语句的类型举例:1、for编译制导语句补充Schedule(type[,chunk])¡schedule子句描述如何将循环的迭代划分给线程组中的线程¡如果没有指定chunk大小,迭代会尽可能的平均分配给每个线程¡type为static,循环被分成大小为chunk的块,静态分配给线程¡type为

6、dynamic,循环被动态划分为大小为chunk的块,动态分配给线程串行执行的程序块为:for(i=0;;i++)matct();for(j=0;;j++)match();并行的执行为:#pragmaompparallel//由并行组里面的线程组并行执行{#pragmaompforschedule(static,100)//schedule子句可以省{for(i=0;;i++)match();}#pragmaompforschedule(static,100)//schedule子句可以省{fo

7、r(j=0;;j++)match();}}或者#pragmaompparallelforprivate(i)//parallelfor后面只能跟一个for循环for(i=0;;i++)//private说明里面的变量i是各自线程私有的match();2、Sections编译制导语句串行执行的程序块为:for(i=0;i<10000;i++)matct();并行的执行为:#pragmaompparallelprivate(i){#pragmaompsections//代码被划分给线程组中的各线程{

8、#pragmaompsectionfor(i=0;i<5000;i++)match();#pragmaompsectionfor(i=5000;i<10000;i++)match();}3、single编译制导语句串行执行的程序块为:for(i=0;;i++)matct();并行的执行为:#pragmaompparallel{#pragmaompsingle//代码只有线程组中的一个线程执行。{for(i=0;;i++)match();}}4、实现线程同步#pragmaompparallel{#

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

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

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