2016-10-28 2 views
1

내 질문은 GPU 메모리에 앉아있는 변수에 값을 명시 적으로 할당 할 수 있습니까? 아니면 항상 cudaMemcpy를 사용해야합니까?CUDA GPU 메모리의 변수에 값을 할당

int * a; 
cudaMalloc((void**)&a, sizeof(int)); 
*a = 5; 

또는 내가에만 수행 할 수 있습니다 :

예를 들어 내가이 작업을 수행 할 수 있습니다

int * dev_a; 
int a = 5; 
cudaMalloc((void**)&dev_a, sizeof(int)); 
cudaMemcpy(dev_a, &a, sizeof(int) , cudaMemcpyHostToDevice); 

답변

0

간단한 대답은 당신이 장치 메모리에 값을 할당 할 수있다. 여기에는 두 가지 이유가 있습니다. 그 이유는 디바이스 메모리가 램에 있지 않고 물리적으로 gpu에 있고 그 값을 pcie bridge를 통해 전송해야하기 때문입니다.

더 복잡한 대답은 cuda 6 이후에 통합 메모리를 사용할 수 있다는 것입니다. 그러면 원하는 작업을 수행 할 수 있습니다. 송금은 백그라운드에서 발생하며 시간이 걸립니다.

https://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/