从HsaMemFlags 与 HsaMemMapFlags 理解 GPU 存储管理硬件技术
2026/8/4 12:03:21 网站建设 项目流程

HsaMemFlags 与 HsaMemMapFlags 所反映的 GPU 存储管理硬件技术

本文分析HsaMemFlagsHsaMemMapFlags以及相关的HSA_SVM_FLAGS每一个标志位背后对应的 GPU / 平台硬件技术,帮助理解 KFD 内存分配、映射与迁移语义与底层硬件能力之间的映射关系。


1. 概述

在深入具体的显存管理 API 之前,有必要先俯瞰整个硬件系统为支持存储管理提供了哪些能力,以及每项能力要解决的问题。HsaMemFlagsHsaMemMapFlags以及 SVM 的相关标志位正是这些硬件能力在软件接口上的直接投影——分配与映射时设置的每一个 bit,几乎都对应一项具体的硬件技术。因此,熟悉这几组标志位的过程,本身就是一次自底向上梳理 GPU 存储管理硬件技术的过程。

HsaMemFlags用于hsaKmtAllocMemory分配阶段HsaMemMapFlags用于hsaKmtMapMemoryToGPU映射阶段,二者的每个 bit 几乎都对应一项具体的 GPU / 互连 / IOMMU / 页表硬件能力。总体上它们覆盖以下几大硬件技术门类:

门类关键技术
内存一致性Infinity Fabric、A+A 一致性域、fine/coarse-grain、system-scope atomics
原子操作PCIe AtomicOp、IOMMUv2 ATC 路径
地址转换 / SVMGPUVM 多级页表、IOMMUv2(ATS/PRI)、统一虚拟地址空间
显存类型HBM/GDDR VRAM 分区、GART/GTT、GDS/LDS/Scratch 片上存储
缓存策略GPUVM PTE MTYPE(Cached/NonCached/WriteCombined/Uncached)
分页 / TLB多页大小(4K/64K/2M/1G)、可恢复缺页、HMM 页迁移
执行 / 调度AQL 队列、doorbell、MES 固件、SDMA 拷贝/迁移引擎
页权限NX 执行位、只读位、页锁定(pinned)

2. HsaMemFlags 逐位分析

2.1 内存一致性(Cache Coherency)

反映 AMDAPU / A+A(CPU+GPU 统一架构)dGPU的一致性差异。

标志硬件技术带来的益处 / 解决的问题
CoarseGrain(0 = FineGrain)HSA 内存一致性模型。Fine-grain 依赖互连硬件在每次访存时维持一致性;Coarse-grain 只在 dispatch / 同步屏障点由软件强制刷新。对应 GPU L2 cache 的一致性协议行为。Coarse-grain 省去逐次一致性开销,让计算 kernel 全速跑、带宽利用率最高;Fine-grain 则换取 CPU/GPU 随时可见同一份数据,免去显式拷贝与同步,简化编程模型。让软件在"吞吐"与"共享便利"之间按需取舍。
ExtendedCoherent系统级原子一致性(system-scope coherence),原子指令跨 CPU/GPU 全系统范围保持一致,依赖 Infinity Fabric / CXL 类互连的一致性域扩展。使 CPU 与 GPU 能对同一变量做无锁原子协作(生产者/消费者队列、全局计数器、细粒度任务窃取),无需回到 host 端串行同步,大幅降低跨设备协作延迟。
UncachedA+A 平台 fine-grain uncached 访问,绕过 cache,用于 CPU/GPU 频繁读写的共享标志位。对应 GPUVM PTE 的 MTYPE 页属性。消除缓存行乒乓与陈旧数据问题,让 spin flag / 信号量的写入对对端立即可见,是低延迟轮询式同步的关键,避免缓存刷新带来的抖动。
CachePolicy(2 bit,见HSA_CACHING_TYPEGPUVM PTE MTYPE 缓存策略:Cached / NonCached / WriteCombined,直接映射到页表项缓存位。按访问模式定制缓存行为:只读/复用数据用 Cached 提升命中率,流式写用 WriteCombined 合并突发写以打满带宽,从而针对不同数据流最大化有效带宽。

底层实现:GPU 页表项中的MTYPE + coherence bit,以及 CPU 侧 IOMMU / PCIe 一致性能力。

2.1.1 内存一致性与缓存策略的区别

两者常被混淆,但处在不同层面、解决不同问题:缓存策略决定"单个访问者这次访存走不走缓存、怎么走"(本地性能路径);内存一致性决定"我写进缓存后,别的访问者(另一颗芯片)何时能看到"(多方正确性)。

维度内存一致性(Coherency)缓存策略(Cache Policy / MTYPE)
回答的问题多个访问者之间看到的数据是否一致(谁先看到谁的写入)单个访问者这块内存要不要 / 怎么进缓存
作用对象CPU↔GPU、GPU↔GPU 等多方之间的可见性一条访存请求本身的缓存行为
硬件位置L2 Cache + 一致性协议引擎 + 互连(Infinity Fabric)GPUVM 页表项里的 MTYPE 位(UTCL2 施加)
对应标志CoarseGrain/FineGrainExtendedCoherentCachePolicy(Cached/NonCached/WriteCombined)、Uncached
语义性质正确性与同步语义性能与访问路径选择

两者常配合使用:Uncached(缓存策略)之所以适合 CPU/GPU 共享的 spin flag,正是因为绕过缓存后无需一致性协议介入即可立即互相可见——用"不缓存"规避一致性难题;而 fine-graincoherency走另一条路——允许缓存,靠一致性硬件(Infinity Fabric)保证缓存数据跨芯片同步,用协议换取"既缓存又一致"。一句话概括:缓存策略 = 数据进不进 cache(本地);一致性 = 进了 cache 后跨访问者何时可见(多方)。

2.2 原子操作(Atomics)硬件路径

标志硬件技术带来的益处 / 解决的问题
AtomicAccessFullAPU 上 ATC / IOMMUv2 路径的完整原子操作,系统内存经 IOMMUv2 映射,支持全套原子指令。让 GPU 直接对系统内存执行完整原子集(min/max/and/or 等),复杂并发算法(哈希表、并发队列、直方图归约)可原地在共享内存完成,无需搬运回 VRAM 或退化为锁。
AtomicAccessPartialPCIe 原子事务(PCIe Atomics),dGPU 经 PCIe 只支持 SWAP / CAS / FetchAdd 三种硬件原子(PCI Express 规范定义的 AtomicOp)。在纯 PCIe 平台上仍提供硬件级 CAS/FetchAdd,支撑基本的无锁计数与指针交换,避免完全退回到 host 端串行处理;明确其能力边界也帮助运行时选择正确的回退路径。

底层依赖:PCIe AtomicOp Completer/Requester 能力IOMMUv2 ATS/PRI

2.3 地址转换与虚拟内存(SVM / IOMMU)

标志硬件技术带来的益处 / 解决的问题
HostAccessGPUVM 页表是否对 CPU 侧建立映射,决定 BAR / 系统内存可见性。让 CPU 能直接读写该缓冲(初始化、检查结果、填充参数),省去中转拷贝;关闭它则保护纯设备私有数据、避免误暴露并节省 BAR 空间。
NonPaged页锁定(page-locked / pinned)内存,避免换页,供 DMA / IOMMU 直接访问。保证物理地址稳定,使 DMA / 迁移引擎无需担心页被换出,获得可预测的低延迟传输,是高吞吐 H2D/D2H 拷贝与 P2P 的前提。
FixedAddress在调用者指定的虚拟地址处分配(类似mmapMAP_FIXED):置位时*MemoryAddress传入期望 VA,分配器必须落在该地址,地址不空闲则失败;不置位时由分配器自行选址。属于 GPUVM 虚拟地址空间的放置控制。让调用者精确控制分配落点,用于需要固定/预留布局的场景(如复用同一 VA 重建映射、满足对特定地址区间的约束),或与已有地址空间规划对齐。
NoAddress/OnlyAddressVRAM 分配与 VA 分配解耦,反映 GPUVM 中"物理显存句柄"与"虚拟地址预留"可分离管理(支持稀疏 / 延迟映射)。支持先预留大段虚拟地址、再按需回填物理页,实现稀疏资源与延迟/超额分配,节省显存并支撑大而稀疏的数据结构。
NoNUMABindNUMA 拓扑感知,系统内存是否绑定特定 NUMA 节点,涉及多 socket / 多内存控制器布局。让分配落在离 GPU 最近的内存控制器上,降低跨 socket 访问延迟、提升有效带宽;放开绑定则在均衡场景下获得更灵活的放置。

对应能力位HSA_CAPABILITY.HSAMMUPresent/SVMAPISupported,依赖ATS + PRI(IOMMUv2 1.1 规范)。

2.4 显存类型与堆管理(VRAM / GTT / 片上存储)

标志硬件技术带来的益处 / 解决的问题
GTTAccessGART(Graphics Address Remapping Table)/ GTT 映射,供 MES(MicroEngine Scheduler)固件访问。把分散的系统内存页在 GPU 侧重映射为连续地址窗口,使 GPU 无需大 VRAM 即可访问 host 内存,是无 VRAM 驻留大数据集的桥梁。
Contiguous连续物理 VRAM 分配,用于需要物理连续的场景(某些 DMA 引擎、P2P、显示扫描)。满足显示扫描、P2P、单描述符 DMA 对物理连续的硬性要求,减少 scatter-gather 描述符数量,提升传输效率与兼容性。
GDSMemoryGDS(Global Data Share)GPU 片上全局数据共享存储器硬件。提供跨 workgroup 的低延迟片上共享存储,适合全局归约、序号分配、跨组同步等,比走 VRAM 快一个数量级。
ScratchScratch 显存,线程私有溢出空间,对应 SGPR/VGPR 溢出临时区。为寄存器溢出提供后备空间,使高寄存器压力的复杂 kernel 仍能正确运行,避免因寄存器不足而编译失败或占用率骤降。
PageSize(2 bit,见HSA_PAGE_SIZE多级页大小(4KB/64KB/2MB/1GB),对应 GPUVM 大页 / 巨页 TLB,降低 TLB miss。大页显著减少 TLB 项数与 miss、缩短地址翻译路径,对大缓冲区的随机访问带宽提升明显;小页则减少内存碎片浪费。

相关:HSA_HEAPTYPE_FRAME_BUFFER_PUBLIC/PRIVATE对应BAR 大小限制 / Resizable BAR (Smart Access Memory)

2.5 执行 / 调度相关内存

标志硬件技术带来的益处 / 解决的问题
AQLQueueMemoryHSA AQL(Architected Queuing Language)队列内存,KFD 保证最优位置与对齐(供 doorbell / HW 调度器访问)。让应用无需内核参与即可通过 doorbell 直接向硬件调度器提交任务,实现低延迟用户态 dispatch,是 GPU 高频提交小任务的性能基础。
QueueObjectAQL queue 对象,供 CPU 读取amd_queue_t的 read pointer。使 CPU 能高效轮询队列进度、做流控与回收,无需系统调用即可感知 GPU 消费位置。
ExecuteAccess页可执行属性(NX / eXecute bit),区分数据页与代码页(着色器指令、队列),影响 PTE 执行权限位。通过 NX 隔离代码与数据,防止数据被当作指令执行,提升安全性并帮助捕获越界跳转等错误。
ExecuteBlitBlit kernel(SDMA / 拷贝内核)对象内存,涉及 SDMA 拷贝引擎。让拷贝/填充卸载到专用 SDMA 引擎,与计算 kernel 并行执行,掩盖数据搬运开销、提升整体吞吐。
ReadOnly页只读属性(PTE 读写位),也用于允许 migration scale-out。只读语义既防止意外写坏共享数据,又让同一页可安全复制到多个 GPU(scale-out),在多卡只读访问时消除迁移争用。

3. HsaMemMapFlags 逐位分析(映射与迁移)

HsaMemMapFlags侧重映射时的迁移语义,反映HMM(Heterogeneous Memory Management)/ 按需分页(Page Migration)硬件链路。

标志硬件技术带来的益处 / 解决的问题
Migrate页迁移:把系统内存页迁移到被映射 GPU 的本地 VRAM,依赖 GPU page fault(recoverable fault)+ SDMA 迁移引擎。让热数据自动落到 GPU 本地高带宽 VRAM,把远端 PCIe 访问变为本地访问,显著提升访问带宽、降低延迟,且对应用透明。
Probe预迁移 / 驱逐提示:预告即将映射,触发非必要数据驱逐,降低后续缺页延迟(“cleanup hint”,可被忽略)。提前腾出显存并预热映射,把缺页开销从关键路径移走,平滑迁移抖动、减少首次访问的长尾延迟。
ReadOnly映射期内存不被修改 → 允许migration scale-out(同一只读页可复制到多 GPU)。只读页可同时复制到多张 GPU 各自的本地 VRAM,多卡并行读取同一数据集时避免相互抢占迁移,提升多卡扩展性。
CachePolicy/PageSize/HostAccessHsaMemFlags中同名字段含义一致,作用于映射阶段的 PTE 属性。在映射阶段按目标设备重新定制缓存/页大小/可见性,使同一块内存针对不同 GPU 得到最优 PTE 属性。

底层是ZONE_DEVICE + drm_pagemap + SDMA的缺页迁移链路。


4. 相关:HSA_SVM_FLAGS(SVM 层的一致性与迁移控制)

HSA_SVM_FLAGS进一步在 SVM 语义上暴露硬件能力:

标志硬件技术带来的益处 / 解决的问题
HSA_SVM_FLAG_HOST_ACCESS保证 CPU 可访问,建立双向映射。让 CPU 与 GPU 共享同一 SVM 指针并双向读写,简化数据准备与结果回读,无需显式 map/unmap。
HSA_SVM_FLAG_COHERENTfine-grained 一致性(所有可访问设备间),依赖一致性互连。跨设备随时看到彼此最新写入,支撑细粒度协作与共享数据结构,免去手动同步刷新。
HSA_SVM_FLAG_EXT_COHERENTdevice-scope atomics 细粒度一致性,system-scope 原子扩展。把原子一致性扩展到系统范围,使跨设备无锁算法正确成立,是多设备协同的正确性基石。
HSA_SVM_FLAG_HIVE_LOCALXGMI Hive 拓扑,优先使用同 hive 内 GPU(HsaNodeProperties.HiveID)。将数据放置/迁移限定在高带宽 XGMI 互连的同一 hive 内,避开慢速跨 hive 链路,最大化多卡间传输带宽。
HSA_SVM_FLAG_GPU_RO/GPU_READ_MOSTLY只读 / 读多优化,允许页复制(replication);写触发缺页。让读多数据在各 GPU 本地各存一份副本,消除重复远程读取与迁移抖动,显著提升只读工作集的多卡吞吐。
HSA_SVM_FLAG_GPU_ALWAYS_MAPPEDXNACK disable语义,GPU 映射始终有效,避免可恢复缺页。保证映射常驻、消除运行期缺页停顿,带来确定性延迟,适合对抖动敏感或不支持重放的场景。

与迁移相关的枚举(HSA_MIGRATE_TRIGGERSHSA_SVM_UNMAP_TRIGGERSHSA_SMI_EVENT)描述了迁移触发源:prefetch、GPU/CPU 缺页、TTM eviction、MMU notifier 等,直接对应 KFD SVM 迁移与驱逐的硬件事件路径。


5. 延伸:平台形态 A+A 与 x86+A 的差异

前面多处标志(如UncachedAtomicAccessFullExtendedCoherent)都特别标注了"A+A 平台"。这里对该术语及其对存储管理能力的影响做一个集中说明。

5.1 术语含义

A+AAMD CPU + AMD GPU的同构平台组合——CPU 与 GPU 均为 AMD 产品,二者通过Infinity Fabric一致性互连直连。与之相对的是x86+A(如 Intel CPU + AMD GPU),CPU 与 GPU 之间只能通过PCIe连接。最典型的 A+A 产品是MI300A:Zen4 CPU chiplet 与 CDNA3 GPU chiplet 封装在一起、物理共享同一片 HBM,是 fine-grain 一致性与统一内存的极致形态。

5.2 能力差异对照

A+A 平台凭借 Infinity Fabric 一致性互连,获得一批纯 PCIe 连接拿不到的硬件能力:

能力A+A(Infinity Fabric)x86+A(PCIe)
缓存一致性硬件维护 fine-grain 一致性仅 coarse-grain / 软件刷新
原子操作全套原子(AtomicAccessFull,走 ATC/IOMMUv2 路径)仅 PCIe 三种原子(AtomicAccessPartial:SWAP / CAS / FetchAdd)
uncached 共享内存支持(Uncached标志)一般不支持
system-scope 原子ExtendedCoherent可用受限
统一内存CPU/GPU 共享 HBM(MI300A)需经 PCIe 迁移 / 映射

5.3 对本文标志位的意义

文档中凡标注"A+A 平台"的标志位(如UncachedAtomicAccessFull),本质上都是依赖 AMD CPU+GPU 一致性互连才能生效的硬件特性;在纯 PCIe 的 dGPU 场景下,它们要么不可用,要么退化为不同的行为路径(例如原子操作退回到AtomicAccessPartial的 PCIe AtomicOp 子集)。因此运行时在选择这些标志前,仍需结合第 8 节的能力发现流程按节点判断可用性。


6. 各技术所在的硬件与模块(物理落点)

前面按标志位拆解了"是什么技术、有什么益处",这一节回答"这些技术究竟落在哪块硬件、硬件的哪个模块里"。先给出一张分层结构图,再用表格逐项定位。

6.1 硬件分层结构

封装内 / 板载存储

CPU 芯片(AMD / Intel)

互连

Infinity Fabric(A+A 一致性域)

XGMI(多 GPU Hive)

PCIe Root Complex / Switch

GPU ASIC(CDNA / RDNA)

CU / SIMD:VGPR·SGPR·LDS·Scratch 寻址

GDS 全局数据共享

L2 Cache + 一致性协议 / 原子 ALU

GPUVM / UTCL2:页表游走器 · TLB · MTYPE

SDMA 拷贝 / 迁移引擎

MES 微引擎 + doorbell aperture

BIF / PCIe 接口(AtomicOp)

CPU 核心 + LLC

集成内存控制器 IMC(NUMA 节点)

IOMMU / IOMMUv2(ATS/PRI/ATC)

HBM / GDDR(VRAM,含 ECC)

系统 DRAM

6.2 技术落点对照表

技术所在硬件具体模块 / 单元说明
MTYPE 缓存策略 / UncachedGPU ASICGPUVM 页表项(PTE)+ UTCL2缓存类型是 PTE 里的 MTYPE 位,由地址转换单元 UTCL2 在翻译时施加。
fine/coarse-grain 一致性GPU ASICL2 Cache + 一致性协议引擎一致性粒度由 L2 及其 coherence 逻辑决定,dispatch/屏障点触发刷新。
GPU 侧原子 ALUGPU ASICL2 / 原子执行单元完整原子集在 GPU 内部 ALU 实现,跨设备时经互连传播。
多级页表 / TLB / 多页大小GPU ASICGPUVM 页表游走器 + TLB(UTCL2)4K/64K/2M/1G 大页与 TLB 命中都由该单元处理。
recoverable page fault / XNACKGPU ASICUTCL2 缺页逻辑 + CU 重放(XNACK)缺页由页表单元上报、由 CU 的 XNACK 机制重放访存。
GART / GTTGPU ASICGART 重映射表(UTCL2 管辖)把分散系统内存页映射为 GPU 侧连续地址窗口。
GDSGPU ASICGDS 片上存储块独立于 L2 的全局数据共享 SRAM。
LDS / Scratch / VGPR·SGPRGPU ASICCU / SIMD 内的片上存储与寻址Scratch 是寄存器溢出后备,寻址由 CU 生成。
SDMA 拷贝 / 迁移GPU ASICSDMA 引擎独立 DMA 引擎,与计算并行搬运数据、执行 HMM 迁移。
AQL 队列 / doorbell / 用户态提交GPU ASICMES 微引擎 + doorbell aperture硬件调度器 MES 消费 AQL 包,doorbell 是寄存器映射窗口。
NX / 只读页权限GPU ASICGPUVM PTE 权限位执行位与读写位同样落在页表项里。
PCIe AtomicOp(部分原子)GPU 接口 + 主板BIF / PCIe 接口 + Root ComplexSWAP/CAS/FetchAdd 由 PCIe 事务层完成,需 RC 支持 Completer。
Resizable BAR (SAM)GPU 接口 + 主板 BIOSBIF BAR 配置 + 主板/BIOS决定 CPU 能否一次性映射整块 VRAM。
HBM / GDDR VRAM(含 ECC)GPU 封装 / 板载显存颗粒 + 显存控制器物理存储介质;ECC 由显存控制器提供。
system-scope 原子 / A+A 一致性互连Infinity Fabric 一致性域把 CPU 与 GPU 纳入同一一致性域,是ExtendedCoherent/Uncached的物理基础。
多 GPU Hive / HIVE_LOCAL互连XGMI 链路同 hive 内 GPU 走高带宽 XGMI,跨 hive 退化。
P2P DMA互连PCIe Switch / XGMIGPU↔GPU 直传,绕开 host 内存。
IOMMUv2(ATS/PRI/ATC)CPU 芯片CPU 侧 IOMMU地址转换服务与页请求接口,AtomicAccessFull、SVM 依赖它。
NUMA 亲和 / 系统内存CPU 芯片集成内存控制器(IMC)+ DRAM分配落在哪个 NUMA 节点由 IMC 拓扑决定。
pinned / page-lockedCPU + OS内核内存管理(KFD 固定页)阻止换页以保证 DMA 地址稳定。
HMM 页迁移 / ZONE_DEVICE / drm_pagemap软件 + GPU内核 HMM 框架 + SDMA迁移的策略层在内核,搬运动作由 GPU SDMA 执行。

记忆线索:“页相关”(PTE/MTYPE/权限/大页/缺页)几乎都在 GPU 的 GPUVM/UTCL2;"搬运"在 SDMA;"提交调度"在 MES/doorbell;"跨芯片一致性与原子"在 Infinity Fabric / PCIe / IOMMU;"存储介质"在 HBM/GDDR 与系统 DRAM。


7. 涉及的硬件技术清单

  1. 一致性互连:Infinity Fabric、A+A 一致性域、system-scope 原子、GPU L2 一致性协议、XGMI Hive。
  2. PCIe 特性:PCIe AtomicOp、Resizable BAR (SAM)、P2P DMA。
  3. 地址转换:IOMMUv2(ATS/PRI)、GPUVM 多级页表、GART/GTT、SVM 统一地址空间。
  4. TLB / 分页:多页大小(4K/64K/2M/1G)、recoverable page fault、HMM 页迁移、XNACK。
  5. 片上 / 专用存储:GDS、LDS、Scratch、HBM/GDDR VRAM 分区。
  6. 缓存策略:MTYPE(Cached/Uncached/WriteCombined)、fine/coarse-grain 粒度。
  7. 调度硬件:AQL 队列、doorbell、MES 固件、SDMA 拷贝 / 迁移引擎。
  8. 页权限:NX 执行位、只读位、页锁定(pinned)。

8. 硬件能力发现路径

上述标志的可用性由HsaNodeProperties.CapabilityHSA_CAPABILITY)等拓扑属性在运行时决定,关键位包括:HSAMMUPresent(IOMMUv2)、SVMAPISupportedCoherentHostAccessASICRevisionMem_EDCSupport(ECC)等。应用 / 运行时应先查询这些能力位,再选择对应的HsaMemFlags/HsaMemMapFlags组合,以避免在不支持的节点上分配失败。

这一篇涉及整个硬件系统的核心技术,内容很多,一下看不明白也不要紧,后面在分析具体功能流程和API时会细讲,按需学习即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询