Динамическое выделение памяти на GPU - PullRequest
5 голосов
/ 09 марта 2011

Можно ли динамически распределять память в глобальной памяти графического процессора внутри ядра?
Я не знаю, насколько большим будет мой ответ, поэтому мне нужен способ выделить память для каждой части ответа.CUDA 4.0 позволяет нам использовать оперативную память ... это хорошая идея или она снизит скорость ??

Ответы [ 2 ]

10 голосов
/ 10 марта 2011

можно использовать 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 голос
/ 10 марта 2011

В CUDA 4.0 вы сможете использовать операторы new и delete из c ++ вместо malloc и free из c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...