OpenMP编程简介
OpenMP是共享存储体系结构上的一个并行编程模型。适合于SMP共享内存多处理系统和多核处理器体系结构。
-
起源于ANSI X3H5标准
-
简单、移植性好和可扩展性等特点
-
提供了支持Fortran、C/C++的API和规范
-
由一组编译制导、运行时库函数(Run-Time routines)
和环境变量组成。 -
工业标准
DEC、Intel、IBM、HP、Sun、SGI等公司支持
包括Linux、UNIX和NT等多种操作系统平台
OpenMP并行编程模式
- OpenMP是基于线程的并行编程模型。
- OpenMP采用Fork-Join并行执行方式
- OpenMP程序开始于一个单独的主线程(Master Thread),然后主线程一直串行执行,直到遇见第一个并行域(Parallel Region),然后开始并行执行并行域。其过程如下:
1、 Fork:主线程创建一个并行线程队列,然后,并行域中的代码在不同的线程上并行执行;
2、 Join:当并行域执行完之后,它们或被同步或被中断,最后只有主线程在执行。
OpenMP的语句模式(C/C++)
OpenMP的所有的编译指导命令都是以#pragma omp开始的,后面跟具体的功能指导命令,命令形式如下:
#pragma omp 指令 子句,子句,子句......
注意:指令可以单独出现,子句必须出现在指令之后
代码实例
#include <iostream>
#include <omp.h>
using namespace std;
int main()
{
omp_set_num_threads(5);
#pragma omp parallel
{
cout<<"Hello !"<<endl;
}
return 0;
}
OpenMP最常用的也是最简单的指令parallel
parallel 用在一个结构块之前,表示这段代码将被多个线程并行执行