我有一台配备专用 GPU 的笔记本电脑,Nvidia Quadro P3200。它有 6 GB 的 RAM。
笔记本电脑还有 32 GB 的“普通”(CPU?)RAM。
我计划使用 GPU 进行并行计算,运行物理模拟。其中一些涉及相当大的阵列。
我只是想知道,如果内核中的总内存(所有变量和所有数组)达到 6 GB 的 GPU RAM,我可以以某种方式使用 CPU 的内存吗?
在计算过程中我不会将笔记本电脑用于其他任何事情,因此主 RAM 不应该很忙。
Ps 我使用的是戴尔 Precision 7530,Windows 10。
Gor*_*bić 43
简短回答:不,你不能。
更长的答案:带宽,更重要的是,PCIe 总线上 GPU 和 RAM 之间的延迟比 GPU 和 VRAM 之间的延迟差一个数量级,因此如果您打算这样做,您可能会在中央处理器。
CPU 可以直接使用VRAM的一部分(映射到 PCI 孔径的部分,通常为 256MB)作为 RAM,但它会比普通 RAM 慢,因为 PCIe 是一个瓶颈。将它用于诸如交换之类的事情可能是可行的。
过去可以通过更改 GPU BIOS 上的带位来增加内存孔径大小,但自从 Nvidia Fermi (GeForce 4xx) GPU 以来,我还没有尝试过。如果它仍然有效,还需要您的 BIOS 能够完成映射大于标准孔径的任务(极不可能在笔记本电脑上进行过测试)。
例如,至强融核计算卡需要将其整个 RAM 映射到 PCI 孔中,因此它需要在主机中具有 64 位功能的 BIOS,该 BIOS 知道如何将孔映射到传统 4GB(32 位)边界之上。
Mok*_*bai 10
是的。这是 CPU 和 GPU 之间的“共享”内存,在 GPU 上传输数据时总是需要少量缓冲区作为缓冲区,但它也可以用作显卡的较慢“后备”与页面文件相同的方式是主内存的较慢后备存储。
您可以通过转到“性能”选项卡并单击您的 GPU,在内置的 Windows 任务管理器中找到正在使用的共享内存。
虽然共享内存会比你的 GPU 内存慢,但可能比你的磁盘快。共享内存将是您的 CPU 内存,它在相当新的机器上的运行速度可能高达 30GB/s,但您的 GPU 内存可能能够达到 256GB/s 或更高。您还将受到 GPU 和 CPU(PCIe 桥接器)之间的链接的限制。这可能是您的限制因素,您需要知道您使用的是 Gen3 还是 Gen4 PCIe 以及它使用多少个通道(通常为“x16”)来找出 CPU 和 GPU 内存之间的总理论带宽。
Arm*_*era 10
据我所知,只要它是页锁定(固定)内存,您就可以共享主机的 RAM 。在这种情况下,数据传输会更快,因为您不需要显式传输数据,您只需要确保同步您的工作(cudaDeviceSynchronize例如,如果使用 CUDA)。
现在,对于这个问题:
我只是想知道,如果内核中的总内存(所有变量和所有数组)达到 6 GB 的 GPU RAM,我可以以某种方式使用 CPU 的内存吗?
不知道有没有办法“扩展”GPU内存。我不认为 GPU 可以使用比它自己更大的固定内存,但我不确定。我认为在这种情况下你可以做的是批量工作。您的工作是否可以分发,以便您一次只处理 6GB,保存结果,然后处理另一个 6GB?在这种情况下,分批工作可能是一个解决方案。
例如,您可以实现一个简单的批处理方案,如下所示:
int main() {
float *hst_ptr = nullptr;
float *dev_ptr = nullptr;
size_t ns = 128; // 128 elements in this example
size_t data_size = ns * sizeof(*hst_ptr);
cudaHostAlloc((void**)&hst_ptr, data_size, cudaHostAllocMapped);
cudaHostGetDevicePointer(&dev_ptr, hst_ptr, 0);
// say that we want to work on 4 batches of 128 elements
for (size_t cnt = 0; cnt < 4; ++cnt) {
populate_data(hst_ptr); // read from another array in ram
kernel<<<1, ns>>>(dev_ptr);
cudaDeviceSynchronize();
save_data(hst_ptr); // write to another array in ram
}
cudaFreeHost(hst_ptr);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39412 次 |
| 最近记录: |