2011-03-09 19 views
5

Belleği, GPU'nun Çekirdek içindeki Global bellekte dinamik olarak ayırmak mümkün mü?
Cevabımın ne kadar büyük olacağını bilmiyorum, bu nedenle cevabın her bölümü için bellek ayırmanın bir yoluna ihtiyacım var. CUDA 4.0, RAM'i kullanmamıza izin verdi ... iyi bir fikir mi yoksa hızı düşürecek mi?GPU'da Dinamik Ayırma Belleği

cevap

10

Çekirdek içindeki malloc kullanmak mümkündür.

__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: Bir çekirdek içinde malloc çağırdıktan sonra tahsis edilen bellek cihazda olacak sanırım ... Doğru muyum? – Manolete

+0

Bir işlemci, 2048 çekirdek gtx980 kadar hızlı malloc olamadığından, gpu'ya ayırdığından şüpheleniyorum. Aksi takdirde sadece entegre gpus için ayrık değil. –

1

CUDA 4.0 itibaren c malloc ve free C++ yerine new ve delete operatörlerini kullanmak mümkün olacak: NVIDIA CUDA kılavuzundan alınmıştır aşağıdakileri kontrol edin.