SUA(System Unified Address )原理分析

CPU与外设的统一虚拟地址寻址是OpenCL SVM的基石,为OpenCL和AI计算编程提供了生产力工具。

1. 64 位地址空间的实际使用限制

在 AMD64 和 IA64 架构中,虽然理论上提供了 64 位(2^64 ≈ 18.4 亿 TB)的虚拟地址空间,但 CPU 实际仅使用其中的一部分:

  • 低地址区域:VA[63:47] = 0(0x00000),覆盖地址范围 0x0000 0000 0000 ~ 0x0000 FFFF FFFF(约 256TB)

  • 高地址区域:VA[63:47] = 0x1FFFF(全 1),覆盖地址范围 0xFFFF 0000 0000 ~ 0xFFFF FFFF FFFF(约 256TB)

  • 中间区域:VA [63:47] 为 0x00001 ~ 0x1FFFE 的范围,这部分地址空间被称为空洞(Hole),CPU 无法直接访问。

因此,实际有效的虚拟地址宽度为 48 位(2^48 ≈ 256TB),这是硬件设计的限制,而非软件限制。

2. 为什么会有 “空洞”

这种设计主要出于以下考虑:

  1. 兼容性:保持与 32 位系统的向后兼容性,低地址区域(0~4GB)可直接映射到 32 位地址空间。

  2. 简化硬件:减少需要处理的地址位数,降低地址转换硬件的复杂度。

  3. 安全隔离:空洞区域可用于防止意外或恶意访问,增强系统安全性。

3. GPU 如何利用这个 “空洞”

在 SUA(系统统一寻址)模式下,GPU 会将自己的GPUVM 地址空间(40 位,2^40 ≈ 1TB)映射到这个空洞区域:

  • GPUVM 的 40 位地址被扩展为 64 位,高 17 位(VA [63:47])通常设置为 0x00001 或其他未被 CPU 使用的值。

  • 例如,GPUVM 地址 0x0000 0000 1234 可能被映射为 64 位地址 0x0000 1000 0000 1234,落在空洞区域内。

这样,GPU 可以同时访问:

  • ATC 地址空间(通过 IOMMU 访问系统内存,对应 CPU 的低区和高区)

  • GPUVM 地址空间(通过 GPUVM 页表访问专用内存,对应空洞区域)

4. 地址转换流程示例

假设 GPU 要访问一个 64 位地址 0x0000 1000 0000 1234

  1. 判断地址归属:检查高 17 位(VA [63:47] = 0x00001),发现属于 GPUVM 空洞区域。

  2. 地址压缩

    • 从 64 位地址中减去GPUVM_Base(例如 0x0000 1000 0000 0000),得到 40 位相对地址 0x0000 0000 1234

    • 设置ATC 位 = 0,表示使用 GPUVM 页表。

  3. 地址转换:通过 GPUVM 页表将 40 位地址转换为物理地址。

若地址属于 ATC 空间(如 VA [63:47]=0 或 0x1FFFF),则:

  1. 直接使用低 48 位地址(VA [47:0])。

  2. 设置ATC 位 = 1,通过 IOMMU 转换为物理地址。

5. 图示说明

6.总结

  • CPU 限制:AMD64/IA64 CPU 仅使用 64 位地址空间中的 48 位,形成中间空洞。

  • GPU 优化:GPU 利用这个空洞区域映射自己的 GPUVM 地址空间,实现与系统内存的统一寻址(SUA)。

  • 地址转换:通过 ATC 位和孔径机制,硬件自动区分访问路径(ATC/IOMMU 或 GPUVM),确保高效且安全的内存访问。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeeplyMind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值