我有一个非常简单的代码片段:
$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}}自动,或者我应该声明它是私有的,以防止各种线程破坏它?
答案 0 :(得分:3)
在OpenACC中,默认情况下scalars是首选私有,因此通常不需要将它们放入私有"条款。你真正需要使用"私人"子句用于数组或标量"转义"计算区域,例如通过引用传递给设备例程,或者它的值在计算区域之外使用。