跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:OpenMP API 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
在自动确定作用域的情况下,编译器应用本节中介绍的规则来确定并行构造中变量的作用域。
这些规则并不适用于由 OpenMP 规范隐式确定作用域的变量,如工作共享 DO 循环或 FOR 循环的循环索引变量。
在自动确定并行构造中引用的且没有预先确定或隐式确定作用域的标量变量的作用域时,编译器会按给定顺序根据以下规则 PS1-PS3 来检查变量的使用。
PS1:对于组中执行并行区域的线程而言,如果在该区域中使用变量不会导致数据争用情形,则将变量的作用域确定为 SHARED。
PS2:如果在每个执行并行区域的线程中,在读取变量之前始终先由同一线程写入,则将变量的作用域确定为 PRIVATE。如果可以将变量的作用域确定为 PRIVATE,并且该变量在写入(在并行区域之后写入)之前被读取,而构造为 PARALLEL DO 或 PARALLEL SECTIONS,则将其作用域确定为 LASTPRIVATE。
PS3:如果在编译器可以识别的归约操作中使用变量,则将该变量的作用域确定为具有该特定操作类型的 REDUCTION。
PA1:对于组中执行并行区域的线程而言,如果在该区域中使用数组不会导致数据争用情形,则将数组的作用域确定为 SHARED。