- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.2.1循环并行化-IntelSoftware
5.2.1 环并行化
环并行化编译制导语句的格式:
环并行化是使用OpenMP 来并行化程序的最重要的部分,它是并行区域编程的一个特例。
由于大量的科学计算程序将很大一部分时间用在处理循环计算上,对于 环进行并行化处理
对这一部分应用程序非常关键,因此 环并行化是OpenMP 应用程序中是一个相对独立且非
常重要的组成部分。在C/C++语言中, 环并行化语句的编译制导语句格式如下:
代码5.2 环并行化语句的编译制导语句格式
#pragma omp parallel for [clause[clause…]]
for (index = first ; test_expression ; increment_expr){
body of the loop;
}
或者
#pragma omp parallel [clause[clause]]
{
#pragma omp for [clause[clause]]
for (index = first; test_expression; increment_expr) {
body of the loop;
}
}
这两个版本的效果基本相同。只是,如果并行的线程需要在 环的开始、或结束时作些工作
的话,就只 用parallel 与for 子句分离的版本。
这个编译制导语句中的parallel 关键字将紧跟的程序块扩展为若干完全等同的并行区域,
每个线程拥有完全相同的并行区域;而关键字for 则将循环中的工作分配到线程组中,线程
组中的每一个线程完成 环中的一部分内容。编译制导语句的功 区域一直延伸到 for
环、或用大括号{}包围起来的程序块的结束。编译制导语句后面的字句 (clause)用来控制
编译制导语句的具体行为,在后面将通过例子来详细讲解子句的构成以及相关子句的语法状
况。
环并行化语句的限制
并不是所有的 环语句都能够在其前面加上#pragma omp parallel 来实现并行化,在OpenMP
2.5 规范中,OpenMP 对于可以以多线程执行的循环有以下约束:
·循环语句中的循环变量必须是有符号整型,如果是无符号整型,就无法使用。注意,在未
来的OpenMP 3.0 规范中,这个约束可 被取消。
· 环语句 中的比较操作必须是这样 的形式: loop_variable , =, 或=
loop_invariant_integer。
·循环语句中的第三个表达式 (for 环的循环步长)必须是整数加或整数 ,加 的数值
必须是一个循环不变量 (loop invariant value)
·如果比较操作是或=,那么循环变量的值在每次迭代时都必须增加;相反地,如果比较
操作是或=,那么循环变量的值在每次迭代时都必须减少。
·循环必须是单入口、单出口的,也就是说循环内部不允许有 够到达循环之外的跳转语句,
也不允许有外部的跳转语句到达循环内部。在这里,exit 语句是一个特例,因为它将中止
整个程序的执行。如果使用了goto 或break 语句,那么它们的跳转范围必须在循环之内,
不 跳出循环。异常处理也是如此,所有的异常都必须在循环内部处理。
虽然这些约束看上去有些多,但大多数循环都能够非常容易地被重写成符合约束条件地形
式。只有满足上述约束条件,编译器才 通过OpenMP 将循环并行化。然而,虽然编译器
够完成循环的并行化,仍然需要程序员来保证循环功 的正确。
简单循环并行化
我们首先看一个简单 环的并行化过程,将两个向量相加,并将计算的结果保存到第三个向
量中,向量的维数为n。向量相加即向量的各个分量分别相加。
for (int i=0;in;i++)
z[i]=x[i]+y[i];
显然向量相加的算法中,各个分量之间没有数据相关性, 环计算的过程也没有循环依赖性,
即某一次循环的结果不依赖于其它次 环的结果。而如下的例子当中就存在循环依赖性。
for (int i=0;in;i++)
z[i]=z[i-1]+x[i]+y[i]
可以看出,第i 次的循环依赖于i-1 次的 环的结果,对于这样有依赖性的循环进行并行化
必须考虑循环依赖性。
关于数据相关的概念,如果语句S2
您可能关注的文档
- 2、用手指按停音叉后,会产生什么现象.ppt
- 2、掌握数字通信系统的基本组成.ppt
- 2皮秒脉冲放大中自相位调制效应实验研究-光子学报.PDF
- 2计算机仿真技术 - Read.PDF
- 2真背面单页转曲线(WPSmilelI_EN_LOW_CN-proofreadingeva).PDF
- 2(临川一中钟瑞文)《直线运动》.ppt
- 2、化学性质.ppt
- 2集成电路运算放大电路.ppt.ppt
- 2第二章园林布局3.ppt.ppt
- 2. 项目简介 - 澳门科学技术发展基金.PDF
- 2025年上海市食品加工厂余热发电系统设计可行性研究报告.docx
- 2026届高三高考总复习地理(中图版)强化练:气压带和风带的形成.ppt
- 2025年天津市家庭农场林下经济复合种养模式可行性研究(1).docx
- 2026届高三高考总复习地理(中图版)强化练:气压带和风带的形成.pptx
- 2025年天津市学校教室甲醛空气净化系统安装可行性研究报告.docx
- 2025年上海市精炼炉对电子封装用低熔点合金制备的可行性分析.docx
- 2025年上海市JSP于旅游景区智能导览系统开发的可行性研究.docx
- 2025年上海市诺氟沙星在水产运输保活中的应用可行性研究.docx
- 2026届高三高考总复习地理(中图版)强化练:热力环流.pptx
- 2026届高三高考总复习地理(中图版)强化练:热力环流.ppt
文档评论(0)