GPU-系统内存映射

问题描述 投票:9回答:1

如何映射系统内存(RAM)以进行GPU访问?我很清楚虚拟内存如何用于cpu,但是不确定GPU在访问GPU映射的系统内存(主机)时如何工作。基本上与数据如何从系统内存复制到主机内存以及反之亦然有关。您能否提供参考文章支持的解释?

architecture io hardware gpu computer-architecture
1个回答
13
投票

我发现以下幻灯片组非常有用:http://developer.amd.com/afds/assets/presentations/1004_final.pdf

融合点状记忆系统零复制的好处皮埃尔·布迪耶AMD公司OpenGL / OpenCL的会员格雷厄姆·塞勒斯(Graham Sellers)AMD公司OpenGL管理器

AMD Fusion开发者峰会2011年6月

但是请注意,这是一个快速移动的区域。与其说是开发新概念,不如说是将虚拟内存等概念最终应用到GPU。让我总结一下。

[例如,在2010年以前,GPU通常是独立的PCI或PCI Express卡或板。他们在GPU卡上有一些DRAM。该板载DRAM速度非常快。他们还可以通过CPU上的DMA复制引擎访问CPU端的DRAM。 GPU这样访问CPU内存通常很慢。

GPU内存未分页。因此,GPU内存通常不进行缓存,除了GPU内部的软件托管缓存(如纹理缓存)外。 “受软件管理”表示这些缓存不是缓存一致的,必须手动刷新。

通常,GPU仅访问CPU DRAM的一小部分-孔。通常,它是固定的-不受分页的影响。通常,甚至不需要进行虚拟地址转换-通常虚拟地址=物理地址+某些偏移量。

((当然,其余的CPU内存是正确的虚拟内存,可以进行分页,确定地转换和缓存。只是GPU无法安全地访问此内存,因为GPU确实(无法)访问虚拟内存子系统,并且缓存一致性系统。

现在,以上方法有效,但这很痛苦。首先在CPU内部然后在GPU内部进行操作很慢。容易出错。还有一个巨大的安全风险:用户提供的GPU代码通常可以(缓慢且不安全地)访问所有CPU DRAM,因此可能被恶意软件使用。

AMD宣布了更加紧密地集成GPU和CPU的目标。第一步之一就是创建“融合” APU,即包含CPU和GPU的芯片。 (英特尔在Sandybridge方面也做过类似的事情;我希望ARM也会这样做。)

AMD还宣布,他们打算让GPU使用虚拟内存子系统,并使用缓存。

使GPU使用虚拟内存的一个步骤是AMD IOMMU。英特尔也有类似的情况。尽管IOMMU比非虚拟机OS的虚拟内存更面向虚拟机。

CPU和GPU位于同一芯片内的系统通常使CPU和GPU访问相同的DRAM芯片。因此,不再有“板上GPU”和“ GPU外CPU” DRAM。

但是通常系统主板上的DRAM仍然有一个分割,分割的部分,即主要由CPU使用的内存和主要由GPU使用的内存。即使内存可以驻留在相同的DRAM芯片中,通常也有很大一部分是“图形”。由于历史原因,在上面的论文中将其称为“本地”内存。 CPU和图形内存的调整方式可能有所不同-通常,GPU内存的优先级较低,除了视频刷新以外,并且突发时间更长。

在本文中,您将参考到不同的内部总线:用于“系统”内存的洋葱和用于快速访问图形内存分区的“大蒜”。大蒜内存通常不被缓存。

我所指的论文是关于CPU和GPU如何具有不同的页表的。他们的副标题“零复制的好处”是指将CPU数据结构器映射到GPU页表中,因此您无需复制它。

等。

系统的这一领域正在迅速发展,因此2011年的论文已经几乎过时了。但您应该注意趋势

[(a)软件WANTS统一访问CPU和GPU内存-虚拟内存和可缓存

但是

[(b)尽管硬件试图提供(a),但是特殊的图形内存功能几乎总是使专用图形内存成为可能,即使只是相同DRAM的一部分,也显着提高了速度或电源效率。

这个差距可能正在缩小,但是每当您认为它即将消失时,就可以玩另一个硬件技巧。

-

顺便说一句,应该从2012年开始更新此答案-我在2019年写此问题。仍然有很多应用,例如tge CPU / GPU内存区别。 GPU内存的速度仍然更高,但如今,至少在数据中心DL系统中,GPU内存通常比CPU还多。家用PC没那么多。而且,GPU现在支持虚拟内存。这绝不是完整的更新。

© www.soinside.com 2019 - 2024. All rights reserved.