fortran - 使用 OpenACC 循环,每个线程是否都会获得标量的私有(private)副本?

标签 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 是我的问题的重点,即:这里的每个线程都得到它自己的 x 自动副本,或者我应该将其声明为私有(private)以防止各种线程破坏它?

最佳答案

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

关于fortran - 使用 OpenACC 循环,每个线程是否都会获得标量的私有(private)副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36773513/

相关文章:

c++ - OpenAcc标准中内核与并行指令之间的区别

c++ - OpenACC - 稀疏矩阵库

python - 如何记录 f2py 的 fortran 函数?

fortran - .i. 是什么意思?在 Fortran 中引用?

eclipse - 如何在 Eclipse 中使用 Photran IDE 设置断点?

cuda - Visual C++ 中的 OpenACC

c++ - 如何使用 OpenACC 对微分方程进行积分?

fortran - 使用 ifort 进行数组复制的程序崩溃

visual-studio-code - 带有 Intel Fortran 调试器的 VSCode : debugging window doesn't show allocatable variables

c++ - 如何使用 OpenACC 计算 Mandelbrot 集?