OpenMP并行程序设计.ppt
《OpenMP并行程序设计.ppt》由会员分享,可在线阅读,更多相关《OpenMP并行程序设计.ppt(53页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、本课程得到Intel大学合作计划支持课程网站:http:/ OpenMP并行程序设计简介华南理工大学 陈虎 博士OpenMP概述OpenMP应用编程接口API是在共享存储体系结构上的一个编程模型:包含编译制导(Compiler Directive),运行库例程(Runtime Library)和环境变量(Environment Variables)支持增量并行化(Incremental Parallelization)OpenMP历史1994年,第一个ANSI X3H5草案提出,被否决1997年,OpenMP标准规范代替原先被否决的ANSI X3H5,被人们认可1997年10月公布了与Fort
2、ran语言捆绑的第一个标准规范 FORTRAN version 1.0 1998年11月9日公布了支持C和C+的标准规范C/C+version 1.0 2000年11月推出FORTRAN version 2.0 2002年3月推出C/C+version 2.0 2005年5月OpenMP2.5将原来的Fortran和C/C+标准规范相结合 OpenMP的优势,缺点优势:相对简单。不需要显式设置互斥锁,条件变量,数据范围以及初始化。可扩展。主要是利用添加并行化指令到顺序程序中,由编译器完成自动并行化。移植性好。OpenMP规范中定义的制导指令、运行库和环境变量,能够使用户在保证程序的可移植性的前
3、提下,按照标准将已有的串行程序逐步并行化,可以在不同的产商提供的共享存储体系结构间比较容易地移植。OpenMP的优势,缺点缺点:程序的可维护性不够好当程序比较复杂的时候,编程会显得比较困难OpenMP的支持环境Intel等的C+和Fortran编译器Microsoft的Visual Studio 2005gcc4.2以上版本也宣布对其支持(尚未正式发布)OpenMP并行程序运行并行区间(淡蓝色)表示该部分程序计算量大,需要多个处理器共同来处理以提高效率和运行速度并行区间以外的部分表示该部分的程序不适宜或者不能并行执行,只能由一个处理器来执行OpenMP并行编程模型OpenMP并行编程模型 基于
4、线程的并行编程模型(Programming Model)OpenMP使用Fork-Join并行执行模型 OpenMP程序设计include#include“omp.h”Int main()#pragma omp parallel Printf(“hello world!n”);程序的输出结果:hello world!hello world!hello world!OpenMP程序结构基于基于c/c+语言的语言的OpenMP程序的结构程序的结构#include main()int var1,var2,var3;/*Serial code*/*Beginning of parallel secti
5、on.Fork a team ofthreads*/*Specify variable scoping*/#pragma omp parallel private(var1,var2)shared(var3)/*Parallel section executed by all threads*/*All threads join master thread and disband*/*Resume serial code*/编译制导 OpenMP的#pragma语句的格式为#pragma omp directive_name#pragma ompdirective-nameclause,.ne
6、wline制导指令前缀。对所有的OpenMP语句都需要这样的前缀。OpenMP制导指令。在制导指令前缀和子句之间必须有一个正确的OpenMP制导指令。子句。在没有其它约束条件下,子句可以无序,也可以任意的选择。这一部分也可以没有。换行符。表明这条制导语句的终止。编译制导作用域静态扩展文本代码在一个编译制导语句之后,被封装到一个结构块中 孤立语句一个OpenMP的编译制导语句不依赖于其它的语句 动态扩展 包括静态范围和孤立语句作用域作用域动态范围静态范围for语句出现在一个封闭的并行域中 孤立语句critical和sections语句出现在封闭的并行域之外#pragma omp parallel
7、#pragma omp for for()sub1();sub2();void sub1()#pragma omp critical void sub2()#pragma omp sections 并行域结构并行域中的代码被所有的线程执行具体格式#pragma omp parallel clause,clausenewlineclause=if(scalar-expression)private(list)firstprivate(list)default(shared|none)shared(list)copyin(list)reduction(operator:list)num_threa
8、ds(integer-expression)共享任务结构共享任务结构将它所包含的代码划分给线程组的各成员来执行并行for循环并行sections串行执行for编译制导语句for语句指定紧随它的循环语句必须由线程组并行执行;语句格式#pragma omp for clause,clause newlineclause=Schedule(type,chunk)orderedprivate(list)firstprivate(list)lastprivate(list)shared(list)reduction(operator:list)nowait for编译制导语句schedule子句描述如何
9、将循环的迭代划分给线程组中的线程如果没有指定chunk大小,迭代会尽可能的平均分配给每个线程type为static,循环被分成大小为 chunk的块,静态分配给线程type为dynamic,循环被动态划分为大小为chunk的块,动态分配给线程Sections编译制导语句sections编译制导语句指定内部的代码被划分给线程组中的各线程不同的section由不同的线程执行Section语句格式:#pragma omp sections clause,clause newline#pragma omp section newline#pragma omp section newline Secti
10、ons编译制导语句clause=private(list)firstprivate(list)lastprivate(list)reduction(operator:list)nowait 在sections语句结束处有一个隐含的路障,使用了nowait子句除外Sections编译制导语句#include/eg2#define N 1000int main()int i;float aN,bN,cN;/*Some initializations*/for(i=0;i N;i+)ai=bi=i*1.0;#pragma omp parallel shared(a,b,c)private(i)#pr
11、agma omp sections nowait#pragma omp section for(i=0;i N/2;i+)ci=ai+bi;#pragma omp section for(i=N/2;i N;i+)ci=ai+bi;/*end of sections*/*end of parallel section*/single编译制导语句single编译制导语句指定内部代码只有线程组中的一个线程执行。线程组中没有执行single语句的线程会一直等待代码块的结束,使用nowait子句除外语句格式:#pragma omp single clause,clause newlineclause=
12、private(list)firstprivate(list)nowait组合的并行共享任务结构parallel for编译制导语句parallel sections编译制导语句同步结构master 制导语句critical制导语句barrier制导语句atomic制导语句flush制导语句ordered制导语句master 制导语句制导语句master制导语句指定代码段只有主线程执行语句格式#pragma omp master newline critical制导语句制导语句critical制导语句表明域中的代码一次只能执行一个线程 其他线程被阻塞在临界区语句格式:#pragma omp c
13、ritical name newline critical制导语句制导语句#include main()int x;x=0;#pragma omp parallel shared(x)#pragma omp critical x=x+1;/*end of parallel section*/barrier制导语句制导语句barrier制导语句用来同步一个线程组中所有的线程先到达的线程在此阻塞,等待其他线程barrier语句最小代码必须是一个结构化的块语句格式#pragma omp barrier newlinebarrier制导语句制导语句错误正确if(x=0)#pragma omp barr
14、ierif(x=0)#pragma omp barrier barrier正确与错误使用比较atomic制导语句制导语句atomic制导语句指定特定的存储单元将被原子更新语句格式#pragma omp atomic newline atomic使用的格式x binop=expr x binop=expr x+x+x+x x-x-x-x x x是一个标量是一个标量exprexpr是一个不含对是一个不含对x x引用的标量表达式,且不被重载引用的标量表达式,且不被重载binopbinop是是+,*,-,/,&,|,or,or之一,且不被重载之一,且不被重载flush制导语句制导语句flush制导语句
15、用以标识一个同步点,用以确保所有的线程看到一致的存储器视图语句格式#pragma omp flush(list)newline flush将在下面几种情形下隐含运行,nowait子句除外barrierbarriercritical:critical:进入与退出部分进入与退出部分ordered:ordered:进入与退出部分进入与退出部分parallel:parallel:退出部分退出部分for:for:退出部分退出部分sections:sections:退出部分退出部分single:single:退出部分退出部分ordered制导语句制导语句ordered制导语句指出其所包含循环的执行任何时候
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenMP 并行 程序设计
限制150内