1. 物理内存:真实的内存芯片颗粒,在物理总线上占据一段或几段连续的地址范围。
  2. 虚拟内存:用户程序使用虚拟内存地址访问内存单元,虚拟内存地址总是要翻译成物理总线上的地址。这样一来,物理总线上不连续的内存范围,在虚拟内存地址上也可能是连续的,这满足了用户程序对大块连续内存的使用需求。

在已经运行过一段时间的系统中,分配一个物理地址上连续的、大内存是比较困难的;Linux操作系统的swiotlb会在系统启动早期预留出一块64MB的连续物理内存,用于满足DMA内存请求。

从物理总线上看,地址连续的大内存很难满足;但是从虚拟内存地址上,这可以通过MMU做到。处理器CPU上的每个核都有一个MMU,以及现代GPU也有一个MMU(我们称之为“IOMMU”)。从物理内存来看:

  1. CPU上的每个核和GPU都是主设备,都可以发起对物理内存的访问,物理内存都会响应这种访问;
  2. CPU上的每个核和GPU使用各自的虚拟地址访问物理内存时,经过各自的MMU地址翻译后,最终应该时物理内存所在的物理总线上的地址。

CPU使用页表来记录虚拟地址到物理地址的映射关系;GPU也使用类似的机制(我们称之为GART表)。

CPU和GPU的交互要确保:

  1. CPU写的数据能被GPU看到;
  2. GPU写的数据能被CPU看到;

由于存在缓存和写缓冲的机制,CPU访问内存一般有三种属性

  1. UC,无缓存、无写合并(CPU访问内存的效率最差)
  2. WC,无缓存、有写合并
  3. WB,有缓存、有写合并(CPU访问内存的效率最高)

CPU对物理内存的写,一般是无确认写。因此,当CPU完成对内存写之后,为了确保GPU能看到,可能需要:

  1. 内存屏障操作
  2. 缓存同步操作
  3. dummy IO读操作

而GPU在写物理内存之后,要确保CPU能看到,CPU可能需要

  1. 缓存同步操作
  2. GPU提供的硬件锁同步操作

虚拟内存和物理内存:从CPU和GPU交互的角度出发相关推荐

  1. GPU 与 CPU 的数据交互

    1.1. OpenGL 的原理 1.1.1. Linux 图形系统发展 地形渲染算法在绘图中使用了 OpenGL 去实现,OpenGL 是一个 开放的三维图形软件包,它独立于窗口系统和操作系统,以它为 ...

  2. CPU与GPU统一虚拟内存(CUDA UM)原理

    CPU与GPU的统一内存(CUDA Unified Memory)原理 文章目录 CPU与GPU的统一内存(CUDA Unified Memory)原理 一.UM下的CUDA编程 二.UM的实现原理 ...

  3. Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了

    作者 | 夕颜 头图 | 下载于ICphoto 出品 | AI 科技大本营(ID:rgznai100) 2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(To ...

  4. 详解操作系统中虚拟内存与物理内存的关系

    点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...

  5. 详解进程的虚拟内存,物理内存,共享内存

    ​ 目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...

  6. linux top 命令---VIRT,RES,SHR,虚拟内存和物理内存(

    VIRT,RES,SHR,虚拟内存和物理内存(转) VIRT: 1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据,以及malloc.new分配的堆空间和分配的栈空间等: ...

  7. Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!

    2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消 ...

  8. 操作系统——Linux 虚拟内存和物理内存的理解

    虚拟内存: 第一层理解 1..每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构: 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...

  9. 一部分 数据 迁移_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

最新文章

  1. on-my-zsh git 仓库下运行卡顿
  2. python切片操作例题_Python之切片操作
  3. 安卓Android科大讯飞语音识别代码使用详解
  4. AppleScript 以管理员身份运行程序
  5. python迭代计算_Python递归和迭代
  6. 嘉年华专访 | 国际上智能运维研究
  7. 用友U8常见问题之最大单据号修复语句
  8. roseMirrorHA5.0 for WindowsServer2008R2配合sqlserver2012|Oracle 11g的安装和配置
  9. 复杂网络matlab程序,复杂网络matlab程序
  10. 【Android 10 源码】深入理解 MediaCodec configure
  11. tftp路由器刷机修复工具_小米路由器mini刷写不死breed
  12. CocosBuilder 完全攻略
  13. 基于蒙特卡洛模型的排队问题求解
  14. 前端下载文件流PDF文件显示空白 或 无法打开
  15. 程序员客栈 接不到单子_常见(但不常见)单子
  16. 最简单、最详细的装系统教程,你get到了吗?
  17. 水倒七分、茶倒八分、酒倒满
  18. 破解XP系统密码的常用的几种方法
  19. 人力资源年终数据分析报告怎么写?这份攻略拿走不谢
  20. boss直聘上看信息 但是不会显示已读

热门文章

  1. 【转载】京东资深架构师代码评审歪诗
  2. 如何烧制瘦肉不硬的红烧肉?
  3. Gmail的smtp端口465和587
  4. HDU 4070 Phage War
  5. 编译原理实验c语言cfg文法,编译原理
  6. html里怎么计算梯形周长公式是什么,如何计算梯形的周长
  7. Termux定时运行python脚本
  8. python进阶学什么意思_为什么要学习python进阶的知识
  9. 双11系列 | 智能应用全面升级 重构“人货场”
  10. Notes-4:C++练习之LL(1)语法分析