2011-03-21 3 views
0

하나의 공유 배열을 사용하고 인덱스 오프셋을 사용하지 않고도 CUDA 포트란에 여러 공유 배열을 할당 할 수 있습니까?CUDA 포트란 : 별도의 이름을 가진 다중 공유 배열?

포인터가 작동하지 않고 '포인터'및 '대상'속성이 '공유'속성과 충돌합니다.

이것은 내가 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 

사람이 작업을 수행하는 또 다른 방법을 알고 있나요? 포틀랜드 CUDA 포트란 설명서에서 도움

+0

실행시 공유 배열 크기를 알고 있습니까? – fabrizioM

+0

다른 배열 크기로 여러 인스턴스를 시작할 수 있기를 원하므로 각 배열 크기의 소스 코드를 편집하는 것이 부족하여 동적 메모리 할당을 사용해야합니다. – Eddy

답변

1

에 미리

감사합니다 :

이러한 규칙은 디바이스 데이터에 적용

  • 장치 변수와 배열 포인터 또는 대상의 속성을 가질 수 없습니다 .

그래서 나는 그럴 수 없다고 생각합니다. 다른 방법으로는 인덱스를 수동으로 추적하거나 (원하지 않는 것처럼 보임) 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)