跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:OpenMP API 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
在自动确定作用域的情况下,编译器应用本节中介绍的规则来确定 task 构造中变量的作用域。
这些规则不适用于由 OpenMP 规范隐式确定作用域的变量,如 PARALLEL DO/for 循环的循环索引变量。
在自动确定任务构造中引用的且没有预先确定或隐式确定作用域的标量变量的作用域时,编译器会按给定顺序根据以下规则 TS1-TS5 来检查变量的使用。
TS1:如果变量的使用在 task 构造中是只读的,并且在包括该任务构造的并行构造中也是只读的,则自动将变量的作用域确定为 FIRSTPRIVATE。
TS2:如果变量的使用不会导致数据争用,并且可在执行任务时访问该变量,则自动将变量的作用域确定为 SHARED。
TS3:如果变量的使用不会导致数据争用,并且在任务构造中是只读的,但在执行任务时不可访问该变量,则自动将变量的作用域确定为 FIRSTPRIVATE。
TS4:如果变量的使用会导致数据争用,并且在每个执行任务区域的线程中,在读取变量之前始终先由同一线程写入,而且向任务中的变量指定的值不在任务区域之外使用,则自动将变量的作用域确定为 PRIVATE。
TS5:如果变量的使用会导致数据争用,该变量在任务区域中不为只读,并且在任务区域中执行某些读取操作可能会获取在任务之外定义的值,而且向任务中的变量指定的值不在任务区域之外使用,则自动将变量的作用域确定为 FIRSTPRIVATE。
自动确定任务的作用域时不会处理数组。