使用OpenACC循环,每个线程是否获得标量的私有副本?

时间:2016-04-21 15:02:15

标签: fortran openacc

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

$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是我的问题的重点,即:这里的每个线程都有自己的{{{ 1}}自动,或者我应该声明它是私有的,以防止各种线程破坏它?

1 个答案:

答案 0 :(得分:3)

在OpenACC中,默认情况下scalars是首选私有,因此通常不需要将它们放入私有"条款。你真正需要使用"私人"子句用于数组或标量"转义"计算区域,例如通过引用传递给设备例程,或者它的值在计算区域之外使用。