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

退出打印视图

更新时间: 2016 年 7 月
 
 

6.4 任务构造中标量变量的作用域规则

在自动确定作用域的情况下,编译器应用本节中介绍的规则来确定 task 构造中标量变量的作用域。


注 -  在此发行版的 Oracle Developer Studio 中,任务的自动确定作用域功能不处理数组。

在自动确定 task 构造中引用的不是预先确定或隐式确定作用域的标量变量的作用域时,编译器会按数字顺序根据规则 TS1 - TS5 来检查变量的使用。这些规则不适用于由 OpenMP 规范隐式确定作用域的变量,如 parallel for/do 循环的循环索引变量。

  • TS1:如果变量的使用在 task 构造中为只读,并且在包括该 task 构造的 parallel 构造中也为只读,则自动将变量的作用域确定为 firstprivate

  • TS2:如果变量的使用不会导致数据争用,并且可在执行任务时访问该变量,则自动将变量的作用域确定为 shared

  • TS3:如果变量的使用不会导致数据争用,并且在 task 构造中为只读,但在执行任务时不可访问该变量,则自动将变量的作用域确定为 firstprivate

  • TS4:如果变量的使用会导致数据争用,并且在每个执行任务构造的线程中,在读取变量之前始终先由同一线程写入,而且向任务中的变量指定的值不在任务之外使用,则自动将变量的作用域确定为 private

  • TS5:如果变量的使用会导致数据争用,该变量在 task 构造中不为只读,并且在任务中执行的某些读取操作可能会获取在任务之外分配的值,而且向任务中的变量分配的值不在任务之外使用,则自动将变量的作用域确定为 firstprivate