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学习(一)_第1张图片


六、OpenMP中的数据

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

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

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


private(list)

shared(list)


七、例子

for循环


#pragma omp parallel for

for (int i=0; i

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


$ gcc -fopenmp test.c -o test

$ export OMP_NUM_THREADS=5

$ ./test


OpenMP学习(一)_第2张图片

你可能感兴趣的:(OpenMP)