2013-02-16 2 views

답변

6

CUDA 전역 메모리에 상주하는 변수를 선언하려면 __device__ 키워드를 앞에 붙여야합니다. 예 :

__device__ bool myGlobalBoolVar; 

다른 방법으로는, 예를 들어 cudaMalloc와 글로벌 메모리 공간에 메모리를 할당 할 수 있습니다

bool* myGlobalBoolVarPtr; 
cudaMalloc(&myGlobalBoolVarPtr, sizeof(bool)); 

매개 변수로 포인터를 커널에 전달할 수 있습니다. 포인터 매개 변수 자체는 상수 또는 공유 메모리 공간 (아키텍처에 따라 다름)에 위치하지만 전역 메모리를 가리 킵니다.

-3

__global__ kernel <<<i,j>>>() 함수를 호출 할 때 변수를 지정하면 모든 변수는 입니다. (공유) 변수는 동일한 블록에 독립적으로 모든 스레드에 대해 공유됩니다.

+0

올바르지 않습니다. 커널의 매개 변수 변수는 아키텍처에 따라 공유 메모리 또는 상수 메모리에 있습니다. 각 블록에는 자체 데이터 복사본이 있습니다. – CygnusX1

+1

Ow. 나는 "글로벌 (공유) 변수"를 본다. CUDA의 "공유 메모리"는 "전역 메모리"와 동일하지는 않지만 모든 스레드와 모든 블록간에 전역 메모리가 공유됩니다. – CygnusX1

관련 문제