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

  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提供的硬件锁同步操作
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算机内存、主机内存、CPU内存和GPU内存是计算机系统中的四种不同类型的内存。 计算机内存是指计算机系统中用于存储数据和程序的临时存储器。计算机内存可以分为主机内存和显存两种类型。主机内存,也称为系统内存或RAM(Random Access Memory),是计算机系统中用于存储正在运行的应用程序、操作系统和其他系统数据的临时存储器。显存,也称为GPU内存,是专门用于存储图形和视频数据的内存,它通常被显卡使用。 CPU内存,也称为高速缓存(Cache),是一种用于存储CPU指令和数据的高速缓存器。CPU内存是为了解决CPU和主机内存之间速度不匹配问题而设计的,它的访问速度比主机内存更快,但容量更小。CPU内存通常是内置在CPU芯片中的,可以分为多级缓存,如L1、L2、L3等级别。 GPU内存,也称为显存或图形内存,是专门用于存储图形和视频数据的内存。与主机内存不同,GPU内存是专门为图形和视频处理而设计的,它具有高带宽和低延迟的特点,可以提供更高的图形和视频处理性能。GPU内存通常是内置在显卡中的,可以通过显卡驱动程序和图形API进行访问。 总的来说,计算机内存、主机内存、CPU内存和GPU内存的区别在于它们的作用和实现方式不同。计算机内存用于存储数据和程序,而主机内存和GPU内存则分别用于存储计算机系统中的数据和图形/视频数据。CPU内存则是为了加速CPU指令和数据的访问而设计的高速缓存。它们的实现方式也不同,主机内存和GPU内存通常是通过DRAM技术实现的,而CPU内存和GPU内存则是内置在CPU芯片和显卡中的高速缓存器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值