并行编程之OpenMP

OpenMP优势,缺点:

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



OpenMP 的支持环境

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


OpenMP 并行编程模型


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


OpenMP 程序结构

#include <omp.h>

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                             串行执行 



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值