Oracle® Solaris Studio 12.4:OpenMP API 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

6.5 关于自动确定作用域的说明

parallel 构造上指定 _auto(list-of-variables)default(_auto) 子句,并不意味着将同一子句应用于在语法上或动态包含在 parallel 构造中的 task 构造。

在对不是预先确定隐式作用域的变量自动确定作用域时,编译器会按给定顺序根据相应规则来检查变量的使用。如果符合某个规则,编译器将按照匹配的规则确定变量的作用域。如果不匹配任何规则或自动确定作用域功能无法处理变量,则编译器将变量的作用域确定为 shared,并将 paralleltask 构造视为如同指定了 if(0)(Fortran 中为 if(.false.))子句一样。有关更多信息,请参见使用自动确定作用域的限制

如果变量的使用不匹配任何规则,或者如果源代码过于复杂,编译器无法进行充分的分析,通常无法确定变量的作用域。函数调用、复杂的数组下标、内存别名和用户实现的同步都是常见原因。