使用 OpenMP 伪指令

OpenMP 伪指令通过定义各种类型的并行区域来利用共享内存并行性。 并行区域可以包括程序代码的迭代段和非迭代段。

#pragma omp 编译指示的目的属于以下常规类别:

  1. 定义 由线程以并行方式完成工作的并行区域 (#pragma omp parallel)。 大多数 OpenMP 伪指令要么静态绑定,要么动态绑定到外层并行区域。
  2. 定义 如何在并行区域 (#pragma omp sections#pragma omp for#pragma omp single#pragma omp task) 中的线程之间分发或共享工作。
  3. 控制 线程之间的同步 (#pragma omp atomic#pragma omp master#pragma omp barrier#pragma omp critical#pragma omp flush#pragma omp ordered)。
  4. 定义 同一线程 (#pragma omp threadprivate) 中跨并行区域的数据可视性范围。
  5. 控制 同步 (#pragma omp taskwait#pragma omp barrier)。

OpenMP 伪指令语法

读取语法图跳过可视语法图 #pragma omp 编译指示名称 ,子句 statement_block

将某些子句添加到 #pragma omp 编译指示可以对并行区域或工作共享区域的行为进行微调。 例如,可以使用 num_threads 子句来控制并行区域编译指示。

#pragma omp 编译指示通常显示在它们所应用的代码部分之前。 以下示例定义了一个并行区域,在该区域中, for 循环的迭代可以并行运行:
#pragma omp parallel
{
  #pragma omp for
    for (i=0; i<n; i++)
      ...
}
此示例定义了一个并行区域,在该区域中,程序代码的两个或多个非迭代部分可以并行运行:
#pragma omp parallel
{
  #pragma omp sections
  {
    #pragma omp section
       structured_block_1
           ...
    #pragma omp section
       structured_block_2
           ...
        ....
  }
}

有关 OpenMP 伪指令的 pragma-by-pragma 描述,请参阅 XL C/C++ Compiler Reference中的 Pragma 伪指令以进行并行处理