CUDA Fortran:具有不同名称的多个共享阵列?

时间:2011-03-21 16:05:03

标签: arrays pointers cuda fortran

是否确实可以在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

有没有人知道另一种方法吗?

提前感谢您的帮助

1 个答案:

答案 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)