2011-03-09 7 views
5

커널 내부의 GPU 전역 메모리에 동적으로 메모리를 할당 할 수 있습니까?
나는 내 대답이 얼마나 클지 모르기 때문에 대답의 각 부분에 메모리를 할당 할 방법이 필요합니다. CUDA 4.0은 RAM을 사용하는 것을 허용했습니다 ... 좋은 생각입니까 아니면 속도가 느려지나요 ??동적 GPU의 메모리 할당

답변

10

커널 내부에서 malloc을 사용할 수 있습니다.

__global__ void mallocTest() 
{ 
    char* ptr = (char*)malloc(123); 
    printf(“Thread %d got pointer: %p\n”, threadIdx.x, ptr); 
    free(ptr); 
} 
void main() 
{ 
    cudaThreadSetLimit(cudaLimitMallocHeapSize, 128*1024*1024); 
    mallocTest<<<1, 5>>>(); 
    cudaThreadSynchronize(); 
} 

will output: 
Thread 0 got pointer: 00057020 
Thread 1 got pointer: 0005708c 
Thread 2 got pointer: 000570f8 
Thread 3 got pointer: 00057164 
+0

@ scatman : 커널 내에서 malloc을 호출하면 할당 된 메모리가 장치에있는 것 같습니다 ... 맞습니까? – Manolete

+0

CPU가 2048 코어의 gtx980만큼 빠른 malloc을 할 수 없기 때문에 GPU에 할당 된 것으로 의심됩니다. 그렇지 않으면 통합 된 gpus가 개별적이지 않을 것입니다. –

1

은 CUDA 4.0에서 당신이 C에서 mallocfree C에서 ++ 대신 newdelete 연산자를 사용할 수 있습니다 : 엔비디아 CUDA 가이드에서 가져온 다음을 확인.