【问题标题】:CUDA Fortran: Multiple shared arrays with seperate names?CUDA Fortran:具有不同名称的多个共享数组?
【发布时间】:2011-07-19 19:32:38
【问题描述】:

是否真的可以在 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

有人知道另一种方法吗?

提前感谢您的帮助

【问题讨论】:

  • 共享数组的大小在启动时是否已知?
  • 我希望能够启动具有不同数组大小的多个实例,所以没有为每个数组大小编辑源代码,我需要使用动态内存分配

标签: arrays pointers cuda fortran


【解决方案1】:

来自波特兰 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多