当NVIDIA的GPU内存完全用完时,有没有一种方法可以在CUDA中使用RAM?
目前我所想到的是:
- 找到一种检查所有线程块是否被占用的方法
- 将进程移动到RAM中
但显然这需要很多同步工作。
谢谢!
当NVIDIA的GPU内存完全用完时,有没有一种方法可以在CUDA中使用RAM?
目前我所想到的是:
但显然这需要很多同步工作。
谢谢!
如果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);