在GPU上动态分配内存

5

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

2个回答

11

可以在内核中使用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 

@ scatman:我猜当你在内核中调用malloc时,分配的内存将在设备上... 我是对的吗? - Manolete
由于CPU无法像2048核心的GTX980那样快速进行动态内存分配,我怀疑它是在GPU上进行分配。否则,它就只是针对集成GPU而不是离散GPU。 - huseyin tugrul buyukisik

1
从CUDA 4.0开始,您将能够使用C++中的newdelete运算符,而不是C中的mallocfree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接