是否确实可以在CUDA Fortran中分配多个共享数组,而不必仅使用一个共享数组并使用索引偏移?
指针不起作用,“指针”和“目标”属性与“共享”属性冲突。
这就是我想要实现的目标:
attributes(global) subroutine shared_sub_arrays()
integer :: i
real, shared, dimension(*), target :: alldata
real, shared, dimension(:), pointer :: left
real, shared, dimension(:), pointer :: centre
real, shared, dimension(:), pointer :: right
i = threadIdx%x
left => alldata(1:3)
centre => alldata(4:6)
right => alldata(7:9)
left(i) = 1.0
centre(i) = 2.0
right(i) = 3.0
end subroutine shared_sub_arrays
有没有人知道另一种方法吗?
提前感谢您的帮助
答案 0 :(得分:1)
来自Portland CUDA Fortran手册:
这些规则适用于设备数据:
所以我猜这是不可能的。至于其他方法,您可以手动跟踪索引(这似乎是您不想做的),或使用3列的矩阵,例如
real, shared, dimension(:,:) :: alldata
allocate(data(N,3))
! name indices
left=1
centre=2
right=3
! access the columns
alldata(i,left)
alldata(i,centre)
alldata(i,right)