动态分配GPU上的内存

时间:2011-03-09 16:20:28

标签: cuda

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

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:1)

从CUDA 4.0开始,您可以使用c ++中的newdelete运算符代替来自c的mallocfree