2012-07-06 144 views
8

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

回答

10

我发现下面的slideset非常有用:聚变APUS 零拷贝 皮埃尔Boudier AMD 研究员的OpenGL/OpenCL的 格雷厄姆卖方 AMD 经理的OpenGL

的好处 http://developer.amd.com/afds/assets/presentations/1004_final.pdf

存储器系统

AMD Fusion Developer Summit 2011年6月

但请注意,这是一个快速移动的REA。与(最终)将诸如虚拟内存这样的概念应用于GPU相比,并不是开发新概念。让我总结一下。

在过去,比如2010年之前,GPU通常是独立的PCI或PCI -presspress卡或主板。他们在GPU卡上安装了一些DRAM。这种机载DRAM速度非常快。他们也可以通过PCI上的DMA拷贝引擎访问CPU端的DRAM。 GPU像这样访问CPU内存通常很慢。

GPU内存未被分页。对于这个问题,GPU内存通常是未缓存的,除了GPU内的软件管理缓存之外,就像纹理缓存一样。 “软件管理”意味着这些缓存不是缓存一致的,必须手动刷新。

通常,只有一小部分CPU DRAM被GPU访问 - 一个光圈。通常,它被固定 - 不受分页。通常,甚至不受虚拟地址转换的影响 - 通常是虚拟地址=物理地址,也可能是一些偏移量。 (当然,CPU内存的其余部分是正确的虚拟内存,分页,翻译和缓存,只是GPU不能安全地访问它,因为GPU确实(没有)访问虚拟内存子系统和高速缓存一致性系统

现在,上述工作,但它是一个痛苦。在CPU内部的第一件事,然后在GPU内部运行缓慢。容易出错。并且很大的安全风险:用户提供的GPU代码经常可以访问(缓慢和不安全)所有CPU DRAM,因此可能被恶意软件使用

AMD已经宣布了一个更紧密集成GPU和CPU的目标,其中一个步骤是创建“融合”APU,包含CPU和GPU的芯片。 (英特尔已经完成了与Sandybridge的类似工作;我期望ARM也这样做)。

AMD也宣布他们打算让GPU使用虚拟内存子系统并使用缓存。 AMD IOMMU向使GPU使用虚拟内存的方向迈出了一步。英特尔有类似的。尽管IOMMU更多地面向虚拟机,而非虚拟机操作系统的虚拟内存。

CPU和GPU位于同一芯片内的系统通常使CPU和GPU访问相同的DRAM芯片。所以不再有“GPU上”和“GPU外”的DRA​​M。

但是,系统主板上的DRAM通常仍然存在拆分,分区到主要由CPU使用的内存以及主要由GPU使用的内存。即使内存可能存在于相同的DRAM芯片内部,通常很大一块是“图形”。在上面的文件中,由于历史原因,它被称为“本地”内存。 CPU和图形内存可能会有不同的调整 - 通常GPU内存的优先级较低,除了视频刷新,并具有较长的突发。

在本文中,我指的是,有不同的内部总线:洋葱为“系统”内存,“大蒜”为更快访问图形内存分区。大蒜内存通常是未缓存的。

我提到的论文讨论了CPU和GPU如何具有不同的页表。他们的副标题“零复制的好处”是指将CPU数据结构映射到GPU页面表中,这样就不需要复制它。

等等等等,

系统的这个区域正在迅速发展,所以2011年的文件已经过时差不多。但是你要注意趋势

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

(B),虽然硬件试图提供(一),特殊图形内存功能几乎总是可以制作专用的图形内存,即使只是相同DRAM的一个分区,显着更快或更省电。

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