OpenMP学习(一)

一、 何为OpenMP

使用C,C++,Fortran来写共享内存并行应用程序的标准API

包含: 编译指令 运行时程序 环境变量


二、为何使用OpenMP

如果使用自动并行的编译器

1.无法精确并行

对数据依赖性的分析无法决定代码并行是否安全。

2.粒度过大

编译器缺少最大成都并行的信息


三、OpenMP 非常适用于多核结构

存储和线程的模型匹配自然

轻量级

成熟

广泛使用


四、OpenMP 存储模型

所有线程共享同一个内存

数据可以设置为shared(共享)和private(私有

所有线程都可以使用共享数据

只有拥有私有数据的线程才可以使用他自己的私有数据

数据转移对程序员透明

同步大多数时候自动执行


五、OpenMP执行模型

Fork and Join Model

Master thread and Worker thread

Oracle官方图:



六、OpenMP中的数据

在OpenMP中,数据需要被标记出它的类型:shared, private。

shared 表示该数据只有一个实例,所有线程都可以同时读写它。当它改变时,也对所有线程可见(不是立刻同步)。

private 表示所有线程都有数据的一个副本。别的线程不能使用本线程的数据,当它改变时,尽自己可见。


private(list)

shared(list)


七、例子

for循环


#pragma omp parallel for

for (int i=0; i<n; i++)

c[i] = a[i] + b[i];


$ gcc -fopenmp test.c -o test

$ export OMP_NUM_THREADS=5

$ ./test



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值