- 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文档。上传文档
查看更多
OpenMP應用基础实验代码
OpenMP实验内容
请调试并写出以下程序的运行结果,并分析程序中OpenMP各语句的功能。
OpenMP编程环境配置
在VC中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。
程序一:
int main(int argc, char* argv[])
{
#pragma omp parallel for
???? for (int i = 0; i 10; i++ )
???? {
???????? printf(i = %d\n, i);
???? }
???? return 0;
}
运行结果:
i=5
i=0
i=6
i=1
i=7
i=2
i=8
i=3
i=9
i=4
程序二:
void test()
{
???? int a = 0;
???? clock_t t1 = clock();
???? for (int i = 0; i 100000000; i++)
???? {
???????? a = i+1;
???? }
???? clock_t t2 = clock();
???? printf(Time = %d\n, t2-t1);
}
int main(int argc, char* argv[]){
???? clock_t t1 = clock();
#pragma omp parallel for
???? for ( int j = 0; j 2; j++ ){
???????? test();
???? }
???? clock_t t2 = clock();
???? printf(Total time = %d\n, t2-t1);
???? test();
???? return 0;
}
1、运行结果并行计算后效率提高
二、OpenMP并行程序设计
fork/join并行执行模式的概念
OpenMP是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的。
从上中我们也可以发现OpenMP并行执行的程序要全部结束后才能执行后面的非并行部分的代码。这就是标准的并行模式 fork/join式并行模式,共享存储式并行程序就是使用fork/join式并行的。
标准并行模式执行代码的基本思想是程序开始时只有一个主线程,程序中的串行部分都由主线程执行,并行的部分是通过派生其他线程来执行,但是如果并行部分没有结束时是不会执行串行部分的,如上一篇文章中的以下代码:
int main(int argc, char* argv[])
{
???? clock_t t1 = clock();
#pragma omp parallel for
???? for ( int j = 0; j 2; j++ ){
???????? test();
???? }
???? clock_t t2 = clock();
???? printf(Total time = %d\n, t2-t1);
???? test();
???? return 0;
}
需要注意的是:在没有执行完for循环中的代码之前,后面的clock_t t2 = clock();这行代码是不会执行的,如果和调用线程创建函数相比,它相当于先创建线程,并等待线程执行完,所以这种并行模式中在主线程里创建的线程并没有和主线程并行运行。OpenMP指令和库函数
下面来介绍OpenMP的基本指令和常用指令的用法,在C/C++中,OpenMP指令使用的格式为
?????? #pragma omp 指令 [子句[子句]…]
前面提到的parallel for就是一条指令,有些书中也将OpenMP的指令叫做编译指导语句,后面的子句是可选的。例如:
#pragma omp parallel private(i, j)
parallel 就是指令, private是子句
为叙述方便把包含#pragma和OpenMP指令的一行叫做语句,如上面那行叫parallel语句。
OpenMP的指令有以下一些:
?????? parallel,用在一个代码段之前,表示这段代码将被多个线程并行执行
?????? for,用于for循环之前,将循环分配到多个线程中并行执行,必须保证每次循环之间无相关性。
?????? parallel for, parallel 和 for语句的结合,也是用在一个for循环之前,表示for循环的代码将被多个线程并行执行。
?????? sections,用在可能会被并行执行的代码段之前
?????? parallel sections,parallel和sections两个语句的结合
?????
您可能关注的文档
- oeoe經济基础知识(四)考试含答案.doc
- OEM高清紅外网络高速球用户手册.doc
- office2003函數应用完全手册.doc
- office2003培訓课件.doc
- Office2010SP1激活【圖文教程】.docx
- office2010專业加强版安装教程(傻瓜式教程).docx
- office2013安裝与激活教程.docx
- OfficeWord的高級应用.doc
- office_2003_Excel函數excel表格的基本操作教程.doc
- office_辦公软件操作技巧大全.doc
- 人教版八年级上册数学精品教学课件 第十三章 三角形 章末整合练.ppt
- 人教版八年级上册数学精品教学课件 第十五章 轴对称 15.3 等腰三角形-15.3.1 等腰三角形-第2课时 等腰三角形的判定 (4).ppt
- 人教版八年级上册数学精品教学课件 极速提分法 第17招 整体思想在解题中的七种技巧.ppt
- 人教版八年级上册数学精品教学课件 第十五章 分式 专项突破9 分式方程的解在求字母的值或取值范围中的常用技巧.ppt
- 人教版八年级上册数学精品教学课件 第十八章 分式 18.3 分式的加法与减法-第1课时 分式的加减.ppt
- 人教版八年级上册数学精品教学课件 第十四章 全等三角形 14.1 全等三角形及其性质 (4).ppt
- 七年级作文成长的经历(11篇).docx
- 法律责任豁免声明及工作证明函(6篇).docx
- 叙事作文那是一次难忘的尝试750字通用14篇.docx
- 沙滩里的秘密500字(14篇).docx
文档评论(0)