2012-08-22 4 views
2

CUDA에서 공유 변수를 할당하는 방법은 무엇입니까? 나는 특정 블록에 속하는 쓰레드를 통해 데이터를 공유해야하는 커널을 가지고있다. sideid이라는 두 개의 공유 변수가 필요합니다.CUDA에서 공유 변수 할당

extern __shared__ int sid, eid 

를하지만 나에게 __shared__ 변수는 외부 링크를 할 수없는 오류를주고있다 :이처럼 사용할 수 있습니다. 공유 메모리를 할당하는 방법은 두 가지가 있습니다

+0

중복 가능성 [할당하고 공유 메모리 (http://stackoverflow.com/questions/5531247/allocating-shared-memory) – talonmies

답변

8

: 정적 및

1 동적, 정적

__shared__ int Var1[10] 

2, 동적 : 추가해야 "통근"키워드

extern __shared__ int Var1[] 

동적 방법을 사용하여 공유 메모리를 할당하는 경우 공유 메모리를 설정해야합니다. 함수를 호출 할 때 사용하십시오. 예 :
testKernel <<< grid, threads, size>>>(...)
세 번째 para는 공유 메모리의 크기입니다. 이런 식으로 모든 공유 메모리는 같은 주소에서부터 시작됩니다. 그래서 여러 공유 메모리를 정의하고 싶다면. 다음과 같은 코드를 작성해야합니다.

__global__ void func(...) 
{ 
    extern __shared__ char array[]; 
    short * array0 = (short*)array; 
    float * array1 = (float*)(&array0[128]); 
} 
+0

지금이 함수 __device__ 함수이고 좀 __global__에서 호출하는 경우있어 어떻게 그 일을 성취 할 수 있을까요? –

+0

공유 메모리 주소를 장치 기능 – Samuel

+0

@Samuel에 전달할 수 있습니다. 공유 메모리를 전역 함수 외부에 선언하면 파일의 다른 __device__ 함수에 의해 표시되어야합니다. 아니요? – Seltymar