2011-03-09 143 views
5

是否可以在内核中的GPU全局内存上动态分配内存?
我不知道我的答案会有多大,因此我需要一种方法为答案的每个部分分配内存。 CUDA 4.0允许我们使用RAM ...是一个好主意还是会降低速度?在GPU上动态分配内存

回答

10

可以在内核中使用malloc。检查是从NVIDIA CUDA指南采取以下:

__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无法像malloc一样快速地处理gtx980的2048个内核,我怀疑它在gpu上分配。否则它只是为了集成gpus而不是离散的。 –

1

从CUDA 4.0,你将能够使用newdelete运营商从C++而不是mallocfree从C。