2011-03-21 42 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)