2011-03-09 15 views
5

Czy możliwe jest dynamiczne przydzielanie pamięci na globalną pamięć GPU wewnątrz jądra?
Nie wiem, jak duża będzie moja odpowiedź, dlatego potrzebuję sposobu na przydzielenie pamięci dla każdej części odpowiedzi. CUDA 4.0 pozwala nam korzystać z pamięci RAM ... czy to dobry pomysł, czy zmniejszy prędkość?Dynamiczne przydzielanie pamięci na GPU

Odpowiedz

10

Możliwe jest użycie malloc wewnątrz jądra. sprawdź następujące elementy, które pochodzi z przewodnika 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: Przypuszczam, że przydzielona pamięć będzie na urządzeniu po wywołaniu malloc w jądrze ... Mam rację? – Manolete

+0

Ponieważ procesor nie może wykonać tak szybko jak 2048 rdzeni GTX980, podejrzewam, że przydziela on na GPU. w przeciwnym razie byłby to tylko zintegrowany procesor graficzny, który nie byłby dyskretny. –

1

Od CUDA 4.0 będzie można używać new i delete operatorów z C++ zamiast malloc i free od C.

Powiązane problemy