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