Cuda GPU上的动态内存分配

Cuda GPU上的动态内存分配,cuda,Cuda,是否可以在内核内的GPU全局内存上动态分配内存? 我不知道我的答案会有多大,因此我需要一种为答案的每个部分分配内存的方法。CUDA 4.0允许我们使用RAM。。。这是一个好主意还是会降低速度???在内核中使用malloc是可能的。检查nvidia cuda指南中的以下内容: __global__ void mallocTest() { char* ptr = (char*)malloc(123); printf(“Thread %d got pointer: %p\n”, thre

是否可以在内核内的GPU全局内存上动态分配内存?

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

在内核中使用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 
\uuuu全局\uuuuu无效mallocTest()
{ 
char*ptr=(char*)malloc(123);
printf(“线程%d获得指针:%p\n”,threadIdx.x,ptr);
免费(ptr);
} 
void main()
{ 
cudaThreadSetLimit(cudaLimitMallocHeapSize,128*1024*1024);
mallocTest();
cudaThreadSynchronize();
} 
将输出:
线程0获取了指针:00057020
线程1获得指针:0005708c
线程2获得指针:000570f8
线程3获取了指针:00057164

<代码> >代码4,您将可以使用“<代码>新< /COD>和<代码>删除< /COD> C++中的运算符,而不是<代码> Malc C < /C> >和<代码>免费> />代码> C.< /P> @ Stasman:我猜一旦调用内核中的MALOC,将分配的内存将在设备上。我说得对吗?因为cpu的malloc速度不能达到gtx980的2048个内核,所以我怀疑它在gpu上进行分配。否则,它将只适用于集成的GPU,而不是离散的。