2011-03-21 86 views
0

确实有可能在CUDA Fortran中分配多个共享数组,而不必求助于只有一个共享数组并使用索引偏移?CUDA Fortran:具有独立名称的多个共享数组?

指针不起作用,'指针'和'目标'属性与'共享'属性冲突。

这是我想acheive什么:

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

在启动时是否已知共享阵列大小? – fabrizioM 2011-03-21 17:26:22

+0

我希望能够启动具有不同数组大小的多个实例,因此缺少编辑每个数组大小的源代码,我需要使用动态内存分配 – Eddy 2011-03-24 09:31:46

回答

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)