我有一台带有专用 GPU 的笔记本电脑,Nvidia Quadro P3200。它有 6 GB 的 RAM。
笔记本电脑还具有 32 GB 的“普通”(CPU?)RAM。
我计划使用 GPU 进行并行计算,运行物理模拟。其中一些涉及相当大的数组。
我只是想知道,如果我的内核中的总内存(所有变量和所有数组)达到 6 GB 的 GPU RAM,我可以以某种方式使用 CPU 的内存吗?
在计算过程中,我不会将笔记本电脑用于其他任何事情,因此主 RAM 不应该很忙。
Ps 我使用的是戴尔 Precision 7530,Windows 10。
简短的回答:不,你不能。
更长的答案:带宽,更重要的是,PCIe 总线上 GPU 和 RAM 之间的延迟比 GPU 和 VRAM 之间的延迟要差一个数量级,所以如果你要这样做,你不妨在中央处理器。
CPU 可以直接使用 VRAM 的一部分(映射到 PCI 孔径的部分,通常为 256MB)作为 RAM,但它会比普通 RAM 慢,因为 PCIe 是一个瓶颈。将它用于交换之类的东西可能是可行的。
过去可以通过更改 GPU BIOS 上的表带位来增加内存孔径大小,但自从 Nvidia Fermi (GeForce 4xx) GPU 以来我还没有尝试过。如果它仍然有效,还需要您的 BIOS 能够完成映射比标准更大的孔径的任务(它极不可能在笔记本电脑上进行过测试)。
例如,Xeon Phi 计算卡需要将其整个 RAM 映射到 PCI 孔径,因此它需要主机中支持 64 位的 BIOS,该 BIOS 知道如何将孔径映射到传统的 4GB(32 位)边界之上。
是的。这是 CPU 和 GPU 之间的“共享”内存,总是需要少量的缓冲区来在 GPU 上传输数据,但它也可以用作显卡的较慢“支持”与页面文件相同的方式是对主内存的较慢的后备存储。
您可以通过转到“性能”选项卡并单击您的 GPU,在内置的 Windows 任务管理器中找到正在使用的共享内存。
虽然共享内存会比你的 GPU 内存慢,但可能比你的磁盘快。共享内存将是您的 CPU 内存,在相当新的机器上可以运行高达 30GB/s,但您的 GPU 内存可能能够达到 256GB/s 或更多。您还将受到 GPU 和 CPU 之间的链接、PCIe 桥接器的限制。这可能是您的限制因素,您需要知道您是否拥有 Gen3 或 Gen4 PCIe,以及它使用多少通道(通常为“x16”)来找出 CPU 和 GPU 内存之间的总理论带宽。
据我所知,您可以共享主机的 RAM,只要它是page-locked (pinned) memory即可。在这种情况下,数据传输会更快,因为您不需要显式传输数据,您只需要确保同步您的工作(
cudaDeviceSynchronize
例如,如果使用 CUDA)。现在,对于这个问题:
我不知道是否有办法“扩展”GPU 内存。我不认为 GPU 可以使用比它自己更大的固定内存,但我不确定。我认为在这种情况下你可以做的是分批工作。您的工作是否可以分发,以便您一次只处理 6gb,保存结果,然后再处理另一个 6gb?在这种情况下,分批工作可能是一个解决方案。
例如,您可以实现一个简单的批处理方案,如下所示:
任何 GPU 在用完自己的 VRAM 时都可以使用系统 RAM。
类似于用完系统上的 RAM 并将所有多余的数据分页到存储单元 (SSD/HDD),现代 GPU 可以并且将会从系统 RAM 中提取纹理或其他数据。纹理数据可以通过 PCIe 总线从系统 RAM 中使用,以弥补更快 VRAM 的不足。
由于系统 RAM 比 VRAM 慢几倍并且具有更高的延迟,用完 VRAM 将转化为性能损失,并且性能也会受到 PCIe 带宽的限制。
所以这不是可能与否的问题,而是执行时的性能问题。
另请注意,许多集成 GPU 使用系统 RAM,甚至没有自己的。
对于 GPU,其性能的主要因素是软件。一个设计良好的软件将在其输出 FLOPS 限制附近使用 GPU,而一个设计糟糕的软件则不会。通常计算和散列软件属于第一类。分配 VRAM 也是如此。
使用以下关键字时,此问题目前是热门搜索结果:游戏可以使用 RAM 代替 VRAM 吗?
因此,我认为值得补充的是,与游戏 RAM 与 VRAM 使用相关的许多问题已经随着智能存取内存技术而改变,目前 AMD Zen 3 CPU(如 Ryzen 5 5600X 和 Ryzen 7 5800X)支持该技术和 AMD 6000 系列 GPU(如 AMD Radeon RX 6800),并将在接下来的几周内得到 Nvidia RTX 3000 系列 GPU 的支持,稍后将得到第 11 代英特尔 CPU 的支持,但英特尔的技术版本,甚至一些 AMD 主板上使用的名称是 Resizable BAR。
该技术本质上提供了对 CPU 的更多 VRAM 访问,但最终是否也会以相反的方式工作还有待观察,即 GPU 可以访问更多 RAM。