2

我有一个非常简单的代码片段:

$acc data copy(a(:),b(:))
$acc kernels
$acc loop vector
do i=1,1000
  x = a(i)
  b(i) = sqrt(x)
enddo
$acc end kernels
$acc end data

当然,我可以x轻松地省略,但这是一个示例,x也是我的问题的重点,即:这里的每个线程是否自动获得自己的副本x,或者我应该将其声明为私有以防止各种线程崩溃它?

4

1 回答 1

3

在 OpenACC 中,标量默认情况下是 firstprivate,因此通常不需要将它们放在“private”子句中。您真正需要使用“private”子句的唯一情况是用于数组或当标量“转义”计算区域时,例如通过引用传递给设备例程或在计算区域之外使用它的值。

于 2016-04-21T20:52:49.020 回答