ROCm rocr-libhsakmt分析系列4: HsaMemFlags分析
在前文中我们分析了 GPU VM、aperture 以及 libhsakmt 实现的不同类型 apertures。本文将深入探讨更细粒度的地址空间管理单元vm_object。至此整个VM空间的层次关系呼之欲出用图例展示一下。在详细介绍 vm_object 的概念和实现之前我们首先需要理解 libhsakmt 中定义的内存分配标志结构HsaMemFlags以及它如何影响内存的分配、映射和管理。1. 概述HsaMemFlags是一个位域结构体定义在hsakmttypes.h中用于精确控制异构系统中内存的分配行为和属性。它的设计体现了 ROCm 异构计算环境中对内存管理的细粒度控制需求涵盖了从基本的分页策略到高级的原子操作支持等多个维度。1.1 结构定义typedefstruct_HsaMemFlags{union{struct{unsignedintNonPaged:1;// 不可分页内存unsignedintCachePolicy:2;// 缓存策略unsignedintReadOnly:1;// 只读内存unsignedintPageSize:2;// 页面大小unsignedintHostAccess:1;// CPU 访问权限unsignedintNoSubstitute:1;// 禁止内存替换unsignedintGDSMemory:1;// GDS 内存分配unsignedintScratch:1;// Scratch 内存unsignedintAtomicAccessFull:1;// 完整原子操作unsignedintAtomicAccessPartial:1;// 部分原子操作unsignedintExecuteAccess:1;// 可执行内存unsignedintCoarseGrain:1;// 粗粒度一致性unsignedintAQLQueueMemory:1;// AQL 队列内存unsignedintFixedAddress:1;// 固定地址分配unsignedintNoNUMABind:1;// 不绑定 NUMA 节点unsignedintUncached:1;// 非缓存细粒度unsignedintNoAddress:1;// 仅分配 VRAMunsignedintOnlyAddress:1;// 仅分配地址空间unsignedintExtendedCoherent:1;// 扩展一致性unsignedintGTTAccess:1;// GART 映射unsignedintContiguous:1;// 连续 VRAMunsignedintExecuteBlit:1;// Blit 内核对象unsignedintQueueObject:1;// 队列对象unsignedintReserved:7;// 预留位}ui32;HSAuint32 Value;};}HsaMemFlags;2. 标志位详解2.1 基本内存属性标志位说明使用场景NonPaged分配不可分页内存避免页面错误GPU 操作需要确定性访问延迟VRAM 分配CachePolicy缓存策略HSA_CACHING_CACHED、NONCACHED、WRITECOMBINED影响 CPU/GPU 访问性能根据访问模式选择ReadOnly标记内存为只读保护数据不被修改常量缓冲区、代码段、共享只读数据PageSize页面大小4KB/64KB/2MB/1GB大页面减少 TLB miss提升大缓冲区性能2.2 访问控制标志位说明使用场景HostAccess控制 CPU 是否可访问该内存未设置时内存仅 GPU 可见提升安全性和性能NoSubstitute请求的内存类型不可用时禁止回退到系统内存严格的内存分配语义确保使用特定内存类型ExecuteAccess标记内存用于可执行代码或队列影响页属性设置队列内存必须设置此标志2.3 特殊内存区域标志位说明使用场景GDSMemory从 Global Data Share (GDS) 堆分配GPU 间同步、原子操作、跨 CU 通信Scratch从 GPU Scratch 区域分配内核执行时的临时数据、寄存器溢出AQLQueueMemory标记为 AQL 队列内存确保队列内存最优位置和对齐GTTAccess映射到 GART (Graphics Address Remapping Table)MES、图形或 SDMA 操作需要 GTT 空间2.4 原子操作支持标志位说明使用场景AtomicAccessFull支持完整原子操作集APU 使用 ATC 路径需要所有原子操作的系统内存访问AtomicAccessPartial支持部分原子操作PCIe Atomics独立 GPU 通过 PCIe 的有限原子操作SWAP/CAS/FetchAddExtendedCoherent原子指令的系统级一致性确保跨所有设备的原子操作一致性2.5 一致性模型标志位说明使用场景CoarseGrain粗粒度一致性仅在同步点强制一致性减少同步开销适合大多数 GPU 计算场景Uncached细粒度分配的非缓存内存AA 平台控制缓存行为细粒度内存访问2.6 高级分配控制标志位说明使用场景FixedAddress在指定虚拟地址分配内存互操作场景、固定地址布局需求NoNUMABind不绑定到特定 NUMA 节点OS 灵活分配负载均衡优化NoAddress分配 VRAM 但不分配虚拟地址返回句柄仅需内存句柄的场景延迟地址分配OnlyAddress仅分配虚拟地址空间不分配物理内存地址预留、分阶段内存分配Contiguous分配连续的 VRAM某些硬件特性或 DMA 传输要求ExecuteBlit用于 Blit 内核对象图形位块传输操作QueueObjectAQL 队列对象用于 CPU 访问读指针Windows 平台队列管理3. 典型使用场景与代码示例3.1 GPU 计算缓冲区为 GPU 计算分配一个 CPU/GPU 共享的缓冲区HsaMemFlags flags{0};flags.ui32.NonPaged1;// 不可分页flags.ui32.CachePolicyHSA_CACHING_CACHED;// 启用缓存flags.ui32.PageSizeHSA_PAGE_SIZE_4KB;// 4KB 页flags.ui32.HostAccess1;// CPU 可访问flags.ui32.CoarseGrain1;// 粗粒度一致性标志位选择说明NonPaged 1GPU 需要确定性访问避免页面错误CachePolicy CACHEDCPU 会频繁访问启用缓存提升性能HostAccess 1CPU 需要读写数据CoarseGrain 1减少同步开销在显式同步点保证一致性3.2 仅 GPU 访问的 VRAM分配高性能的纯 GPU 本地内存HsaMemFlags flags{0};flags.ui32.NonPaged1;// VRAM 必须不可分页flags.ui32.HostAccess0;// CPU 不访问flags.ui32.PageSizeHSA_PAGE_SIZE_64KB;// 大页面减少 TLB missflags.ui32.CoarseGrain1;性能优化点HostAccess 0避免 CPU aperture 映射开销PageSize 64KB大页面提升 GPU 访问效率VRAM 访问带宽远高于系统内存3.3 AQL 队列内存为 HSA 队列分配专用内存HsaMemFlags flags{0};flags.ui32.NonPaged1;flags.ui32.HostAccess1;// CPU 写入命令包flags.ui32.ExecuteAccess1;// 可执行内存flags.ui32.AQLQueueMemory1;// 队列专用标志flags.ui32.CoarseGrain1;flags.ui32.PageSizeHSA_PAGE_SIZE_4KB;关键标志ExecuteAccess 1队列内存必须设置可执行属性AQLQueueMemory 1KFD 确保最优位置和对齐3.4 原子操作内存APU在 APU 上分配支持完整原子操作的内存HsaMemFlags flags{0};flags.ui32.NonPaged1;flags.ui32.HostAccess1;flags.ui32.AtomicAccessFull1;// 完整原子操作支持flags.ui32.PageSizeHSA_PAGE_SIZE_4KB;APU vs 独立 GPUAPUAtomicAccessFull使用 ATC 路径支持所有原子操作独立 GPU使用AtomicAccessPartial仅支持 PCIe 原子操作SWAP/CAS/FetchAdd3.5 固定地址分配互操作在特定地址分配内存用于与其他组件互操作HsaMemFlags flags{0};flags.ui32.NonPaged1;flags.ui32.FixedAddress1;// 固定地址分配flags.ui32.HostAccess1;3.6 两阶段分配NoAddress OnlyAddress高级场景分离物理内存和虚拟地址分配// 阶段 1分配 VRAM不分配虚拟地址HsaMemFlags flags1{0};flags1.ui32.NonPaged1;flags1.ui32.NoAddress1;// 仅物理内存返回句柄// 阶段 2为句柄分配虚拟地址空间HsaMemFlags flags2{0};flags2.ui32.OnlyAddress1;// 仅虚拟地址4. 标志位组合规则与限制4.1 互斥标志以下标志位不能同时设置组合原因CoarseGrainExtendedCoherent一致性模型冲突ExtendedCoherentUncached一致性与缓存策略冲突NoAddressOnlyAddress分配语义冲突实现中的检查if((MemFlags.ui32.CoarseGrainMemFlags.ui32.ExtendedCoherent)||(MemFlags.ui32.ExtendedCoherentMemFlags.ui32.Uncached))returnHSAKMT_STATUS_INVALID_PARAMETER;if(MemFlags.ui32.OnlyAddressMemFlags.ui32.NoAddress)returnHSAKMT_STATUS_INVALID_PARAMETER;4.2 特殊内存区域限制GDS 内存必须GDSMemory 1禁止HostAccess 1CPU 不能直接访问 GDS建议其他标志除NoSubstitute应为 0Scratch 内存必须Scratch 1禁止HostAccess 1限制不支持Alignment参数4.3 页面大小与对齐page_sizePageSizeFromFlags(MemFlags.ui32.PageSize);// 4KB, 64KB, 2MB, 1GB// 对齐要求if(Alignment(Alignmentpage_size||!POWER_OF_2(Alignment)))returnHSAKMT_STATUS_INVALID_PARAMETER;对齐值必须≥ 指定的页面大小是 2 的幂如果为 0使用最小对齐页大小5. 性能考虑与最佳实践5.1 页面大小选择页面大小适用场景优势劣势4KB小缓冲区、默认分配灵活、内存利用率高TLB miss 率高64KB中等缓冲区平衡性能和内存使用轻微内存浪费2MB大缓冲区几百 MBTLB miss 显著减少内存对齐要求高1GB超大缓冲区几 GB极少 TLB miss内存碎片风险推荐默认使用 4KB缓冲区 64MB 时考虑 64KB 页缓冲区 512MB 时考虑 2MB 页5.2 缓存策略选择// 定义在 hsakmttypes.htypedefenum_HSA_CACHING_TYPE{HSA_CACHING_CACHED0,// 完全缓存HSA_CACHING_NONCACHED1,// 完全非缓存HSA_CACHING_WRITECOMBINED2// 写合并}HSA_CACHING_TYPE;选择指南CachedCPU 频繁读写、数据局部性好NonCachedCPU 很少访问、需要强一致性WriteCombinedCPU 主要写入、GPU 主要读取5.3 一致性模型权衡CoarseGrain推荐优势性能开销低适合大多数场景要求在同步点fence、barrier显式同步使用flags.ui32.CoarseGrain 1FineGrain谨慎使用优势自动保证一致性编程简单劣势性能开销高需要硬件支持ATC使用CoarseGrain 0Uncached 05.4 NUMA 优化在多 NUMA 节点系统上// 绑定到特定 NUMA 节点默认行为HsaMemFlags flags{0};flags.ui32.NoNUMABind0;// 绑定到 PreferredNode// 允许任意 NUMA 节点flags.ui32.NoNUMABind1;// OS 灵活分配性能影响绑定保证局部性性能可预测不绑定灵活性高可能跨节点访问6. 常见问题与调试6.1 标志位组合错误常见错误同时设置互斥标志如CoarseGrainExtendedCoherent页面大小与对齐要求不匹配特殊内存区域标志配置错误如 GDS、Scratch解决方法参考第 4 节的组合规则与限制检查标志位的依赖关系使用简化的标志组合进行测试6.2 性能问题诊断TLB miss 过多症状GPU 计算性能低于预期解决增大页面大小64KB 或 2MB缓存一致性开销症状频繁同步时性能下降解决使用CoarseGrain并优化同步点跨节点内存访问症状APU dGPU 系统性能不稳定解决检查NoNUMABind设置确保内存靠近访问者7. 总结HsaMemFlags是 ROCm 异构内存管理的核心抽象它通过 23 个标志位提供了对内存分配行为的精确控制。理解这些标志位的含义、组合规则和性能影响是深入理解 libhsakmt 内存管理机制的基础。关键要点标志位分类基本属性、访问控制、特殊区域、原子操作、一致性模型、高级控制一致性模型优先使用CoarseGrain以获得更好性能页面大小根据缓冲区大小选择合适的页面大小原子操作APU 和独立 GPU 的原子支持机制不同组合规则注意互斥标志遵循特殊内存区域的限制通过合理配置HsaMemFlags可以为 ROCm 应用实现高效、灵活的内存管理策略为后续的内存分配、映射、注册操作奠定基础。

相关新闻

基于lstm的股票预测系统

基于lstm的股票预测系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…

2026/7/4 16:19:57 阅读更多 →
Python+djangoWeb的点餐系统的设计与实现

Python+djangoWeb的点餐系统的设计与实现

目录 点餐系统设计背景技术架构核心功能模块系统创新点应用价值 开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 点餐系统设计背景 随着餐饮行业数字化需求增长,基于PythonDjango的Web点餐系统可提升餐厅运营…

2026/7/5 12:24:31 阅读更多 →
java+vue基于springboot的基于微信小程序的校园跑腿系统 校园快递代取系统97h4937r

java+vue基于springboot的基于微信小程序的校园跑腿系统 校园快递代取系统97h4937r

目录系统概述技术架构核心功能数据安全性能优化开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 基于SpringBoot和Vue的微信小程序校园跑腿系统(如快递代取)是一个为高校学生设计的便捷服务平台…

2026/7/4 23:21:26 阅读更多 →

最新新闻

Azure Local离线模式采购(系列篇之七)

Azure Local离线模式采购(系列篇之七)

0. 重要定位(先看清 Acquire 在做什么) ⚠️ Acquire ≠ 部署完成。Acquire 阶段仅完成 Azure 资源创建及部署介质获取,Virtual Appliance 尚未部署到本地数据中心。完整的生命周期是: Acquire → Deploy → Configure → Operate…

2026/7/5 13:12:06 阅读更多 →
杭州老板IP打造运营公司怎么选?

杭州老板IP打造运营公司怎么选?

选择杭州的老板IP打造运营公司时,可以从以下几个方面进行考量:一、明确需求与目标核心需求:首先明确你希望通过IP打造实现什么目的。是增加品牌知名度、提升客户信任度,还是直接促进销售转化? 行业特性:根据…

2026/7/5 13:12:06 阅读更多 →
input_report_key + input_sync:按键事件的正确报告姿势

input_report_key + input_sync:按键事件的正确报告姿势

input_report_key input_sync:按键事件的正确报告姿势这个仓库已经开源!所有教程,主线内核移植,跑新版本imx-linux/uboot都在这里,或者一起来尝试跑7.1的Linux!欢迎各位大佬观摩!喜欢的话点个⭐…

2026/7/5 13:10:06 阅读更多 →
《南街面包店》 松雪酥|小说|txt下载|番外|全文免费阅读

《南街面包店》 松雪酥|小说|txt下载|番外|全文免费阅读

南街面包店 松雪酥|小说|txt下载|番外|全文免费阅读资料可下载《南街面包店》松雪酥 全文https://pan.baidu.com/s/1lewzOmQuG2M2xEELvONyzQ?pwd2bb8 English Practice Set 61 个人练习草稿,随便记几道题。Part 1 Vocabulary Choose the best word.She opened a …

2026/7/5 13:08:05 阅读更多 →
算法优化中的数学建模与理论界限分析的技术7

算法优化中的数学建模与理论界限分析的技术7

引言算法优化的核心目标与意义数学建模与理论界限分析在算法优化中的作用文章结构与内容概览数学建模基础算法问题的数学抽象方法离散与连续问题的形式化描述目标函数与约束条件的定义常见数学模型类型线性规划与非线性规划动态规划与贪心算法的数学框架图论模型(如…

2026/7/5 13:08:05 阅读更多 →
Agentic AI:聊天机器人到自主执行系统,从岗位要求反推能力栈

Agentic AI:聊天机器人到自主执行系统,从岗位要求反推能力栈

聊《Agentic AI:聊天机器人到自主执行系统,从岗位要求反推能力栈》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要这篇面向关注 AI 产品化和自动化系统的开发者,但不会把“Ag…

2026/7/5 13:02:02 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻