
Digamos que eu tenha uma GPU com memória de 1GB, mas meu aplicativo requer 2GB de memória de placa de vídeo, o que acontecerá quando eu executar o programa? O aplicativo retira memória da RAM? Como ele lida com a memória de vídeo insuficiente?
Por algum motivo, ainda consigo executar o aplicativo e percebi que o processo system.exe
ocupa bastante memória (~800 MB), não tenho certeza se isso está relacionado à memória de vídeo insuficiente ou se há outro problema.
Responder1
As GPUs modernas executarão um modo híbrido onde os drivers/GPU começarão a transmitir dados de textura da RAM do sistema através do barramento PCIe para compensar a RAM “ausente”. Como a RAM do sistema é 3-5X mais lenta que a GDDR5 com latência muito maior, ficar sem "VRAM" se traduziria em um aplicativo mais lento e em perda significativa de FPS.
No entanto, o desempenho será limitado pela largura de banda PCIe (6 GB/s).
Ao programar com o kit de ferramentas CUDA (v2.2+), isso é conhecido comocópia zero.
Aqui está o código dele, para quem estiver curioso como funciona.
float *a_h, *a_map;
cudaGetDeviceProperties(&prop, 0);
if (!prop.canMapHostMemory)
exit(0);
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&a_h, nBytes, cudaHostAllocMapped);
cudaHostGetDevicePointer(&a_map, a_h, 0);
kernel<<<gridSize, blockSize>>>(a_map);
Leia mais em:http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#ixzz3nEbijjQZ
Responder2
O que acontecerá quando eu executar o programa?
Ele usará 100% da VRAM disponível em seu sistema. Ele funcionará sem problemas porque foi implementado para usar também a memória do sistema ou porque você não tem VRAM suficiente, ele pode se comportar de maneira inesperada.
O aplicativo retira memória da RAM?
Se o aplicativo exigir 2 GB de VRAM, ter mais memória do sistema não ajudará muito, a menos que o aplicativo tenha sido projetado para isso.
Como ele lida com a memória de vídeo insuficiente?
Isso depende inteiramente da implementação que o autor do aplicativo escolhe implementar.