在CUDA中GPU内存(NVIDIA)完全用完之后有没有办法使用RAM?
我现在想到的是:
但很明显,这需要很多同步化的东西。
谢谢!
答案 0 :(得分:6)
如果GPU上的内存不足,您可以非常轻松地使用主机内存。你要找的是用cudaHostAlloc
分配的零拷贝内存。以下是最佳实践指南中的示例:
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);
然而,性能将受到PCIe bandwitdh(约6GB / s)的限制。
以下是最佳做法指南中的文档:Zero-Copy