声明 OpenMP 构造中所引用变量的数据共享属性的过程称为确定作用域。有关每个数据共享属性的说明,请参见 OpenMP 3.0 规范的第 2.9.3 节。
在 OpenMP 程序中,会为 OpenMP 构造中引用的每个变量确定作用域。通常,可通过两种方法之一来确定构造中所引用变量的作用域。程序员可使用数据共享属性子句来显式声明变量的作用域,或者,编译器中的 OpenMP API 实现可根据 OpenMP 3.0 规范的第 2.9.1 节自动对预先确定或隐式确定的作用域应用规则。
大多数用户会发现,确定作用域是使用 OpenMP 范例中最难的部分。显式确定变量作用域的过程非常乏味,而且容易出错,尤其是对于大型和复杂的程序而言。而且,在 OpenMP 3.0 规范中针对隐式确定和预先确定变量作用域所指定的规则可能会产生某些意外结果。OpenMP 3.0 规范中引入的 task 指令增加了确定作用域的复杂性和难度。
自动确定作用域功能称为自动作用域,受 Solaris Studio 编译器支持,使得程序员无需显式确定变量的作用域,因此是一个很有用的工具。借助自动作用域功能,编译器可在非常简单的用户模型中使用一些智能规则来确定变量作用域。
早期编译器版本将自动作用域仅限于并行构造中的变量。当前的 Solaris Studio 编译器对自动作用域功能的范围进行了扩展,包含了任务构造中引用的变量。