Oracle® Developer Studio 12.5:OpenMP API 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

6.3 parallel 构造的作用域规则

在自动确定作用域的情况下,编译器应用本节中介绍的规则来确定 parallel 构造中变量的作用域。这些规则不适用于由 OpenMP 规范隐式确定作用域的变量,如工作共享 for/do 循环的循环索引变量。

6.3.1 parallel 构造中标量变量的作用域规则

在自动确定 parallel 构造中引用的不是预先确定或隐式确定作用域的标量变量的作用域时,编译器会按给定顺序根据以下规则 PS1 - PS3 来检查变量的使用。

  • PS1:对于组中执行 parallel 构造的线程而言,如果在该构造中使用变量不会导致数据争用情形,则将该变量的作用域确定为 shared

  • PS2:如果在执行 parallel 构造的每个线程中,变量始终先写入后再由同一线程读取,则将该变量的作用域确定为 private。如果可以将变量的作用域确定为 private,并且该变量先读取后写入(在并行构造后写入),而构造为 parallel for/doparallel sections,则将其作用域确定为 lastprivate

  • PS3:如果在编译器可以识别的归约操作中使用变量,则将该变量的作用域确定为具有该特定操作类型的 reduction

6.3.2 parallel 构造中数组的作用域规则

  • PA1:对于组中执行并行构造的线程而言,如果在该构造中使用数组不会导致数据争用情形,则将数组的作用域确定为 shared