【发布时间】:2016-07-04 04:18:44
【问题描述】:
我需要使用 OpenACC 检测 Fortran 代码。以下是相关部分:
program myprogram
real :: x(160,100,100,8)
!$acc declare create(x(:,:,:,:))
integer, parameter :: ns1=1
integer, parameter :: ns2=8
integer, parameter :: nx=160
!$acc declare create(ns1,ns2,nx) ! apparently I don't need this line?
! lots of stuff happens to define x and plenty of
! other things, then …
subroutine myroutine(id1,id2)
real xin(160,8)
!$acc update device(x(:,:,:,:))
!$acc data copyin(id1,id2,taskid) create(xin(:,:))
!debug
print *, 'in dat',taskid,x(80,id1,id2,1),x(81,id1,id2,1),x(82,id1,id2,1)
! define new arrays for velocity and density
!$acc parallel num_gangs(8) vector_length(160)
!debug
print *, 'in par',taskid,x(80,id1,id2,1),x(81,id1,id2,1),x(82,id1,id2,1)
!$acc loop gang
do ni = ns1,ns2
!$acc loop vector
do i = 1,nx
xin(i,ni) = x(i,id1,id2,ni)
enddo
enddo
!debug
print *, 'xin vals',taskid,xin(80,1),xin(81,1),xin(82,1)
!$acc end parallel
!$acc end data
end subroutine
end program
当我检查“in dat”行和“in par”行的输出时,数字看起来很合理。当我检查“xin vals”行时,我看到了几个 NaN。不是所有的 NaN,而是几个。 xin的任务就是这么简单!可能出了什么问题? (如果你没有猜到,我是 OpenACC 的新手。谢谢。)
编辑:这是用 PGI Fortran 编译的。
【问题讨论】:
-
使用标签 Fortran 以获得更好的可见性。问题中没有特定于 Fortran 90 的内容。
-
@Vladimir F 好的,谢谢您的提示!
-
既然 xin 有 NaN,那么可能 'x' 有 nan。您可以检查 x 中的值以查看那里是否有 Nans
标签: loops fortran nan fortran90 openacc