OpenMP(Open Multi-Processing)

OpenMP是一种基于shared memory的并行计算API,提供良好的移植性和扩展性。其执行模式采用Fork-join model,通过Compiler Directives控制并行与同步。主要特性包括工作共享(如DO/for、SECTIONS、SINGLE)、数据范围属性子句(PRIVATE、FIRSTPRIVATE、LASTPRIVATE等)以及同步指令(BARRIER、CRITICAL等)。程序员可以通过设置环境变量和Run-time Library calls定制线程行为。
摘要由CSDN通过智能技术生成

一 什么是OpenMP?

在并行化计算中,远程内存访问的方式主要有三种shared memory, one-sided communication和Mesaage Passing。OpenMP就是基于shared memory的高度抽象的并行化计算API,具有良好移植性和扩展性。它是一种显性的(explict)的编程模式,给予了用户对完全控制并行化的能力。

二 OpenMP执行模式

OpenMP会顺序执行程序知道遇到了并行指令(parallel directive),当前线程会分出支干来并行化执行parallel directive的内容。所以,用户主要通过合理的插入编译指令(compiler directives)去控制各个资源的分分合合,决定什么时候并行concurency,什么时候同步(synchronization)。这种模式就是典型的Fork-join model

Fork:主线程创建多线程任务,eg,这里0就是主线程,一些特殊的指令仅仅会影响主线程。

Join:等待对应的Fork创建的主线程任务结束,同步后回到主线程上(或者说只保留主线程)

特别的,Fork-join model是可以嵌套的。并且嵌套的的fork join是独立于现有的线程的。

嵌套的例子:

 

三 编程模版

如何加载omp?

Compiler / Platform

Compiler

Flag

Intel
Linux Opteron/Xeon

icc

-openmp

icpc

ifort

PGI
Linux Opteron/Xeon

pgcc

-mp

pgCC

pgf77

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值