- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
GPU访问如何映射系统内存(RAM)?我很清楚虚拟内存如何为 cpu 工作,但不确定当 GPU 访问 GPU 映射的系统内存(主机)时如何工作。基本上与数据如何从系统内存复制到主机内存有关,反之亦然。你能提供引用文章支持的解释吗?
最佳答案
我发现以下幻灯片非常有用:http://developer.amd.com/afds/assets/presentations/1004_final.pdf
FUSION APUS上的内存系统
零拷贝的好处
皮埃尔·布迪埃
AMD
OpenGL/OpenCL 研究员
格雷厄姆·塞勒斯
AMD
OpenGL 经理
AMD Fusion 开发者峰会 2011 年 6 月
但是请注意,这是一个快速发展的领域。与其说是开发新概念,不如说是(最终)将虚拟内存等概念应用于 GPU。让我总结一下。
在过去,比如 2010 年之前,GPU 通常是单独的 PCI 或 PCI-express 卡或板。他们的 GPU 卡上有一些 DRAM。这种板载 DRAM 速度非常快。他们还可以访问 CPU 端的 DRAM,通常是通过跨 PCI 的 DMA 复制引擎。 GPU 像这样访问 CPU 内存通常很慢。
GPU 内存未分页。就此而言,GPU 内存通常是未缓存的,除了 GPU 内部的软件管理缓存,如纹理缓存。 “软件管理”意味着这些缓存不是缓存一致的,必须手动刷新。
通常,GPU 仅访问 CPU DRAM 的一小部分 - 一个孔。通常,它是固定的 - 不受分页的影响。通常,甚至不受虚拟地址转换的影响 - 通常虚拟地址 = 物理地址,+ 可能是一些偏移量。
(当然,其余的 CPU 内存是正确的虚拟内存,分页,当然翻译和缓存。只是 GPU 无法安全地访问它,因为 GPU 确实(没有)访问虚拟内存子系统和缓存一致性系统。
现在,上述工作,但这是一个痛苦。首先在 CPU 内部操作,然后在 GPU 内部操作很慢。容易出错。还有一个很大的安全风险:用户提供的 GPU 代码通常可以(缓慢且不安全地)访问所有 CPU DRAM,因此可能被恶意软件使用。
AMD 宣布了更紧密地集成 GPU 和 CPU 的目标。第一步是创建“Fusion”APU,即包含CPU 和GPU 的芯片。 (英特尔对 Sandybridge 做了类似的事情;我希望 ARM 也这样做。)
AMD 还宣布他们打算让 GPU 使用虚拟内存子系统,并使用缓存。
让 GPU 使用虚拟内存的一个方向是 AMD IOMMU。英特尔也有类似的。尽管 IOMMU 比非虚拟机操作系统的虚拟内存更面向虚拟机。
CPU 和 GPU 位于同一芯片内的系统通常让 CPU 和 GPU 访问相同的 DRAM 芯片。所以不再有“on-GPU-board”和“off-GPU--CPU”DRAM。
但是通常系统主板上的DRAM还是有一个分割、一个分区,分为主要供CPU使用的内存和主要供GPU使用的内存。尽管内存可能位于相同的 DRAM 芯片中,但通常很大一部分是“图形”。在上面的论文中,由于历史原因,它被称为“本地”内存。 CPU 和图形内存的调整方式可能不同——通常 GPU 内存的优先级较低,视频刷新除外,并且具有更长的突发。
在我向您推荐的论文中,有不同的内部总线:洋葱用于“系统”内存,“大蒜”用于更快地访问图形内存分区。 Garlic 内存通常是未缓存的。
我引用的论文讨论了 CPU 和 GPU 如何拥有不同的页表。他们的副标题“零复制的好处”是指将 CPU 数据结构器映射到 GPU 页表中,这样您就不需要复制它。
等等等等,
该系统的这一领域发展迅速,因此 2011 年的论文已经几乎过时了。但你应该注意趋势
(a) 软件 WANTS 统一访问 CPU 和 GPU 内存——虚拟内存和可缓存
但
(b) 尽管硬件试图提供 (a),但特殊的显存功能几乎总是使专用显存(即使只是相同 DRAM 的一个分区)显着更快或能效更高。
差距可能正在缩小,但每次你认为它即将消失时,可以玩另一个硬件技巧。
----
顺便说一句,这个 2012 年的答案应该更新——我是在 2019 年写的。很多仍然适用,例如 tge CPU/GPU 内存区别。 GPU 内存的速度仍然更高,但现在 GPU 内存通常比 CPU 多,至少在数据中心 DL 系统中是这样。在家用电脑中没有那么多。此外,GPU 现在支持虚拟内存。这绝不是一个完整的更新。
关于architecture - GPU - 系统内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11355426/
谁能解释或指出在多 GPU/多显示器设置中渲染如何工作的解释(或至少一些线索)? 例如,我安装了 5 个 NVIDIA Quadro 4000 视频卡并连接了 9 个显示器。显示不进行任何分组。刚刚在
以下代码报错: import spacy spacy.require_gpu() Traceback (most recent call last): File "/home/user/Pycha
正如问题已经暗示的那样,我是深度学习的新手。我知道模型的学习过程在没有 GPU 的情况下会很慢。如果我愿意等待,如果我只使用CPU可以吗? 最佳答案 在计算深度学习(以及一般的神经网络)中执行的许多操
我知道 Renderscript 的设计是为了掩盖我正在运行的处理器的事实,但是有没有办法编写代码,以便在支持 GPU 计算的设备(目前是 Nexus 10)上运行显卡?有什么方法可以判断脚本的功能正
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我想以编程方式找出可用的 GPU 及其当前内存使用情况,并根据内存可用性使用其中一个 GPU。我想在 PyTorch 中执行此操作。 我在这个 post 中看到了以下解决方案: import torc
我喜欢 GPU Gems 的结构化技术摘要。但是自上次发布以来已经过去了很长时间,应该开发新算法来处理新型硬件。 我可以阅读有关最近 GPU 技术成就的哪些信息? 潜伏在编程板上是唯一的方法吗? 最佳
我一直在做一些关于测量数据传输延迟的实验 CPU->GPU 和 GPU->CPU。我发现对于特定消息大小,CPU->GPU 数据传输速率几乎是 GPU->CPU 传输速率的两倍。谁能解释我为什么会这样
当我使用选项 --gres=gpu:1 向具有两个 GPU 的节点提交 SLURM 作业时,如何获取为该作业分配的 GPU ID?是否有用于此目的的环境变量?我使用的 GPU 都是 nvidia GP
我用 gpu、cuda 7.0 和 cudnn 6.5 安装了 tensorflow。当我导入 tensorflow 时,它运行良好。 我正在尝试在 Tensorflow 上运行一个简单的矩阵乘法,但
我们正在寻找有关 slurm salloc gpu 分配的一些建议。目前,给定: % salloc -n 4 -c 2 -gres=gpu:1 % srun env | grep CUDA CUD
我是否必须自定义为非 GPU Tensorflow 库编写的代码以适应tensorflow-gpu 库? 我有一个 GPU,想运行仅为非 GPU tensorflow 库编写的 Python 代码。我
我是否必须自定义为非 GPU Tensorflow 库编写的代码以适应tensorflow-gpu 库? 我有一个 GPU,想运行仅为非 GPU tensorflow 库编写的 Python 代码。我
我正在使用 pytorch 框架训练网络。我的电脑里有 K40 GPU。上周,我在同一台计算机上添加了 1080。 在我的第一个实验中,我在两个 GPU 上观察到相同的结果。然后,我在两个 GPU 上
有没有办法在 Slurm 上超额订阅 GPU,即运行共享一个 GPU 的多个作业/作业步骤?我们只找到了超额订阅 CPU 和内存的方法,但没有找到 GPU。 我们希望在同一 GPU 上并行运行多个作业
我可以访问 4 个 GPU(不是 root 用户)。其中一个 GPU(2 号)表现怪异,它们的一些内存被阻塞但功耗和温度非常低(好像没有任何东西在上面运行)。请参阅下图中 nvidia-smi 的详细
我正在尝试通过 Tensorflow 运行示例 seq2seq,但它不会使用 GPU。以下是我在带有 Tesla K20x 的 Linux 系统上安装 Tensorflow 所采取的步骤 git cl
一位电气工程师最近提醒我不要使用 GPU 进行科学计算(例如,在精度非常重要的地方),因为没有像 CPU 那样的硬件保护措施。这是真的吗?如果是的话,典型硬件中的问题有多普遍/严重? 最佳答案 实际上
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
最近我研究了强化学习,有一个问题困扰着我,我找不到答案:如何使用 GPU 有效地完成训练?据我所知,需要与环境持续交互,这对我来说似乎是一个巨大的瓶颈,因为这项任务通常是非数学的/不可并行化的。然而,
我是一名优秀的程序员,十分优秀!