当GPU内存不足时如何使用RAM?

3

当NVIDIA的GPU内存完全用完时,有没有一种方法可以在CUDA中使用RAM?

目前我所想到的是:

  1. 找到一种检查所有线程块是否被占用的方法
  2. 将进程移动到RAM中

但显然这需要很多同步工作。

谢谢!


1
你所说的RAM是指全局设备内存吗?而GPU内存则是指共享内存? - srodrb
@srodrb GPU内存是指http://www.nvidia.com/object/gpu.html,而RAM则是我们系统的内部存储器。 - Nabin
抱歉,您的问题对我来说有点混淆。我知道什么是GPU,并且它上面有不同类型的内存(共享、寄存器、全局、常量、纹理等)。我期待专家回答这个问题,看起来很有趣。 - srodrb
1
如果我理解正确的话,您可能会对pinned memory(固定内存)感兴趣? - Michal Hosala
@MichalHosala 谢谢您 - Nabin
1个回答

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带宽(约为6GB/s)的限制。
以下是最佳实践指南中的文档链接:零拷贝

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接