GPU内存不足后使用RAM

时间:2014-11-20 09:21:43

标签: c cuda parallel-processing gpu

在CUDA中GPU内存(NVIDIA)完全用完之后有没有办法使用RAM?

我现在想到的是:

  1. 找到一种方法来检查是否使用了所有线程块
  2. 将流程移至RAM
  3. 但很明显,这需要很多同步化的东西。

    谢谢!

1 个答案:

答案 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