并行编程之OpenMP

OpenMP优势,缺点:

优势:
相对简单。不需要显式设置互斥锁,条件变量,数据范围以及初始化。
可扩展。主要是利用添加并行化指令到顺序程序中,由编译器完成自动并行化。
移植性好。OpenMP规范中定义的制导指令、运行库和环境变量,能够使用户在保证程序的可移植性的前提下,按照标准将已有的串行程序逐步并行化,可以在不同的产商提供的共享存储体系结构间比较容易地移植。
缺点:
程序的可维护性不够好
当程序比较复杂的时候,编程会显得比较困难



OpenMP 的支持环境

Intel等的C++和Fortran编译器
Microsoft的Visual Studio 2005
gcc4.2以上版本也宣布对其支持(尚未正式发布)


OpenMP 并行编程模型


基于线程的并行编程模型(Programming Model)
OpenMP使用Fork-Join并行执行模型 


OpenMP 程序结构

#include

main (){

  int var1, var2, var3;

      /*串行执行的代码*/

      ......

      /*OpenMP的编译指导指令*/

  #pragmaomp parallel private(var1, var2) shared(var3) 

  {

  /*多个线程并行执行*/     

  …

  /*All threads join master thread and disband*/

  } 

  /*恢复到串行执行*/    

  …

}



编译制导语句格式


#pragma omp directive_name

#pragma omp

directive_name

[clause, ...]

newline

制导指令前缀。对

所有的OpenMP语

句都需要这样的前

缀。

OpenMP制导指

令。在制导指令前

缀和子句之间必须

有一个正确的

OpenMP制导指

令。

子句。在没有其它

约束条件下,子句

可以无序,也可以

任意的选择。 这一

部分也可以没有。

换行符。表明这条

制导语句的终止。


并行域结构

并行域中的代码被所有的线程执行
具体格式

#pragma omp parallel [clause[[,]clause]…]newline
clause=
if(scalar-expression)
private(list)
firstprivate(list)
default(shared | none)
shared(list)
copyin(list)
reduction(operator: list)
num_threads(integer-expression)


共享任务结构

共享任务结构将它所包含的代码划分给线程组的各成员来执行
并行for循环                    并行sections                             串行执行 



















你可能感兴趣的:(编程相关)