OpenMP 执行模型采用分叉-合并的方式。程序开始是以一个单进程运行,称为执行的主线程。主线程顺序运行到第一个并行块结构时就生成一个线程组,原来的主线程成为线程组的主线程。程序中被并行块包围起来的所有语句在线程组中并行执行,一直到并行块执行完后,线程组中的线程中止,而主线程继续执行。一个程序中可以定义任意数目的并行块,因此,在一个程序的执行中可以分叉、合并若干次。
3 OpenMP指令和语法
OpenMP通过编译指导语句来显式的指导并行化,编译指导语句的含义是在编译器编译程序时,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语义,在一个无法识别OpenMP语义的普通编译器中,会将这些特定的注释当作是普通的注释而被忽略,这种性质带来的好处是程序员可以用同一份代码来编写串行或者并行程序,或在把串行程序改编成并行程序的时候,保持串行源代码部分不变,从而极大地方便程序编写人员。
3.1 OpenMP指令格式
OpenMP的指令格式为: #pragma omp directive-name [clause[ [,] clause]...]
OpenMP的所有编译指导语句以#pragma omp开始,后面跟着具体的功能指令,其中directive部分就包含了具体的编译指导语句,包括parallel、for、parallel for、section、sections、single、master、critical、flush、ordered和atomic。这些编译指导语句或者用来分配任务,或者用来同步。后面的可选字句clause给出了相应的编译指导语句的参数,字句可以影响到编译指导语句的具体行为,每一个编译指导语句都有一系列适合它的子句,其中有5个编译指导语句(master、critical、flush、ordered、atomic)不能跟相应的子句。
|