Sun Studio 12:C 用户指南

storeback 变量

#pragma MP taskloop storeback (list_of_storeback_variables)

使用此 pragma 指定所有应视为 storeback 变量的变量。

storeback 变量的值在循环中计算,并且计算的值在循环终止后使用。storeback 变量的最后一个循环迭代值在循环终止后使用。当变量为私有变量时,此类变量可以很好地通过此指令显式声明为 storeback 变量,通过将变量显式声明为私有变量或通过使用缺省作用域规则均可。

请注意,storeback 变量的返回存储操作发生在显式并行化循环的最后一次迭代中,而无论该迭代是否更新 storeback 变量的值。换句话说,处理循环最后一次迭代的处理器可能并不是当前包含 storeback 变量的最后更新值的同一处理器。请看以下示例:


#pragma MP taskloop private(x)
#pragma MP taskloop storeback(x)
   for (i=1; i <= n; i++) {
      if (...) {
          x=...
      }
}
   printf (“%d”, x);

在上例中,通过 printf() 调用打印出的 storeback 变量 x 的值可能与通过 i 循环的串行版本打印出的值不同,原因是,在显式并行化情况下,处理循环最后一次迭代(当 i==n 时)的处理器(即执行 x 的返回存储操作的处理器)可能不是当前包含 x 的最后更新值的同一处理器。编译器将尝试发出警告消息,提醒用户注意此类潜在问题。

在显式并行化的循环中,作为数组引用的变量不视为 storeback 变量。因此,如果需要此类返回存储操作(例如,如果作为数组引用的变量已声明为私有变量),则将作为数组引用的变量包括在 list_of_storeback_variables 中很重要。