虚拟内存和物理内存:从CPU和GPU交互的角度出发
- 物理内存:真实的内存芯片颗粒,在物理总线上占据一段或几段连续的地址范围。
- 虚拟内存:用户程序使用虚拟内存地址访问内存单元,虚拟内存地址总是要翻译成物理总线上的地址。这样一来,物理总线上不连续的内存范围,在虚拟内存地址上也可能是连续的,这满足了用户程序对大块连续内存的使用需求。
在已经运行过一段时间的系统中,分配一个物理地址上连续的、大内存是比较困难的;Linux操作系统的swiotlb会在系统启动早期预留出一块64MB的连续物理内存,用于满足DMA内存请求。
从物理总线上看,地址连续的大内存很难满足;但是从虚拟内存地址上,这可以通过MMU做到。处理器CPU上的每个核都有一个MMU,以及现代GPU也有一个MMU(我们称之为“IOMMU”)。从物理内存来看:
- CPU上的每个核和GPU都是主设备,都可以发起对物理内存的访问,物理内存都会响应这种访问;
- CPU上的每个核和GPU使用各自的虚拟地址访问物理内存时,经过各自的MMU地址翻译后,最终应该时物理内存所在的物理总线上的地址。
CPU使用页表来记录虚拟地址到物理地址的映射关系;GPU也使用类似的机制(我们称之为GART表)。
CPU和GPU的交互要确保:
- CPU写的数据能被GPU看到;
- GPU写的数据能被CPU看到;
由于存在缓存和写缓冲的机制,CPU访问内存一般有三种属性
- UC,无缓存、无写合并(CPU访问内存的效率最差)
- WC,无缓存、有写合并
- WB,有缓存、有写合并(CPU访问内存的效率最高)
CPU对物理内存的写,一般是无确认写。因此,当CPU完成对内存写之后,为了确保GPU能看到,可能需要:
- 内存屏障操作
- 缓存同步操作
- dummy IO读操作
而GPU在写物理内存之后,要确保CPU能看到,CPU可能需要
- 缓存同步操作
- GPU提供的硬件锁同步操作
虚拟内存和物理内存:从CPU和GPU交互的角度出发相关推荐
- GPU 与 CPU 的数据交互
1.1. OpenGL 的原理 1.1.1. Linux 图形系统发展 地形渲染算法在绘图中使用了 OpenGL 去实现,OpenGL 是一个 开放的三维图形软件包,它独立于窗口系统和操作系统,以它为 ...
- CPU与GPU统一虚拟内存(CUDA UM)原理
CPU与GPU的统一内存(CUDA Unified Memory)原理 文章目录 CPU与GPU的统一内存(CUDA Unified Memory)原理 一.UM下的CUDA编程 二.UM的实现原理 ...
- Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了
作者 | 夕颜 头图 | 下载于ICphoto 出品 | AI 科技大本营(ID:rgznai100) 2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(To ...
- 详解操作系统中虚拟内存与物理内存的关系
点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...
- 详解进程的虚拟内存,物理内存,共享内存
目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...
- linux top 命令---VIRT,RES,SHR,虚拟内存和物理内存(
VIRT,RES,SHR,虚拟内存和物理内存(转) VIRT: 1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据,以及malloc.new分配的堆空间和分配的栈空间等: ...
- Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!
2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消 ...
- 操作系统——Linux 虚拟内存和物理内存的理解
虚拟内存: 第一层理解 1..每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构: 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...
- 一部分 数据 迁移_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...
最新文章
- on-my-zsh git 仓库下运行卡顿
- python切片操作例题_Python之切片操作
- 安卓Android科大讯飞语音识别代码使用详解
- AppleScript 以管理员身份运行程序
- python迭代计算_Python递归和迭代
- 嘉年华专访 | 国际上智能运维研究
- 用友U8常见问题之最大单据号修复语句
- roseMirrorHA5.0 for WindowsServer2008R2配合sqlserver2012|Oracle 11g的安装和配置
- 复杂网络matlab程序,复杂网络matlab程序
- 【Android 10 源码】深入理解 MediaCodec configure
- tftp路由器刷机修复工具_小米路由器mini刷写不死breed
- CocosBuilder 完全攻略
- 基于蒙特卡洛模型的排队问题求解
- 前端下载文件流PDF文件显示空白 或 无法打开
- 程序员客栈 接不到单子_常见(但不常见)单子
- 最简单、最详细的装系统教程,你get到了吗?
- 水倒七分、茶倒八分、酒倒满
- 破解XP系统密码的常用的几种方法
- 人力资源年终数据分析报告怎么写?这份攻略拿走不谢
- boss直聘上看信息 但是不会显示已读