Pull Request已成功合入, 合并人@CANN-robot
(感谢 YzQnWyx 的贡献)变更摘要
此 PR 主要引入了 ACL_MEM_LOCATION_TYPE_MANAGED 托管内存位置类型,统一了 ACL 与 Runtime 层对 UVM(统一虚拟内存)的语义表达。同时,移除了旧的 RT_MEMORY_LOC_UVM_MANAGED 枚举值,将 RT_MEMORY_LOC_MANAGED 作为 UVM 托管内存的唯一标识,并重构了驱动层中各类内存类型到位置类型的映射逻辑,使 SVM 子类型不再笼统地映射为 MANAGED,而是按实际物理位置映射为 DEVICE 或 HOST。
主要改动
- 新增
ACL_MEM_LOCATION_TYPE_MANAGED枚举值:在aclrtMemLocationType枚举中添加了ACL_MEM_LOCATION_TYPE_MANAGED(值为 3),同时移除mem_base.h中旧的RT_MEMORY_LOC_UVM_MANAGED,使RT_MEMORY_LOC_MANAGED成为托管内存的唯一枚举标识 aclrtMallocPhysicalImpl参数校验扩展:将ACL_MEM_LOCATION_TYPE_MANAGED与ACL_MEM_LOCATION_TYPE_UNREGISTERED一并列为不支持的位置类型,统一通过AclErrorLogManager报告参数错误GetMemLocationTypeDesc描述映射补充:新增ACL_MEM_LOCATION_TYPE_MANAGED的描述条目,并统一调整描述字符串格式(如"ACL_MEM_LOCATION_TYPE_DEVICE(1)")- 驱动层内存位置映射重构:在
PtrGetAttributes和PtrGetRealLocation中,将DV_MEM_SVM_DEVICE/DV_MEM_SVM从RT_MEMORY_LOC_MANAGED改为RT_MEMORY_LOC_DEVICE,DV_MEM_SVM_HOST改为RT_MEMORY_LOC_HOST,而DV_MEM_UVM专门映射为RT_MEMORY_LOC_MANAGED - UVM 回调及单元测试适配:
UvmCallback::IsUvmMem中改用RT_MEMORY_LOC_MANAGED判断;新增drvMemGetAttribute_10stub 及对应测试用例,覆盖DV_MEM_UVM下PtrGetRealLocation的正确性


代码审查
经过对所有 12 个变更文件的逐一审查,此 diff 并未引入任何正确性、安全性、可靠性或破坏性变更方面的问题。所有变更均一致且正确。
以下是各文件审查结果汇总:
- docs/03_api_ref/25_数据类型及其操作接口.md — 文档新增
ACL_MEM_LOCATION_TYPE_MANAGED枚举值及其平台支持说明,无问题。 - include/external/acl/acl_rt.h — 在
aclrtMemLocationType枚举中新增ACL_MEM_LOCATION_TYPE_MANAGED,枚举值位置正确(隐式值为 3),无问题。 - pkg_inc/runtime/runtime/mem_base.h — 移除
RT_MEMORY_LOC_UVM_MANAGED,保留RT_MEMORY_LOC_MANAGED和RT_MEMORY_LOC_MAX,所有引用均已同步更新,无问题。 - src/acl/aclrt_impl/memory.cpp —
aclrtMallocPhysicalImpl新增对ACL_MEM_LOCATION_TYPE_MANAGED的拒绝逻辑,与ACL_MEM_LOCATION_TYPE_UNREGISTERED一并拦截,逻辑正确。 - src/acl/utils/data_type_utils.h — 描述映射表新增
ACL_MEM_LOCATION_TYPE_MANAGED(3)条目,同时将前缀从MEM_LOCATION_TYPE_统一为ACL_MEM_LOCATION_TYPE_,无问题。 - src/runtime/core/src/uvm/uvm_callback.cc —
IsUvmMem中将RT_MEMORY_LOC_UVM_MANAGED替换为RT_MEMORY_LOC_MANAGED,与枚举变更一致,且PtrGetRealLocation中 UVM 类型现正确返回RT_MEMORY_LOC_MANAGED,行为正确。 - src/runtime/driver/npu_driver_mem.cc —
PtrGetAttributes和PtrGetRealLocation中 SVM 子类型现映射到更准确的 DEVICE/HOST,新增DV_MEM_UVM处理并映射到RT_MEMORY_LOC_MANAGED。逻辑正确,else if链中比特位独立无冲突。 - tests/ut/acl/testcase/acl_runtime_unittest.cpp — 新增
ACL_MEM_LOCATION_TYPE_MANAGED被拒绝的测试用例,测试覆盖正确。 - tests/ut/runtime/runtime/test/platform/910B/stub/rt_utest_api_common_defination.cc — 新增
drvMemGetAttribute_10stub,设置DV_MEM_UVM,无问题。 - tests/ut/runtime/runtime/test/platform/others/rt_utest_api.cc — 新增
drvMemGetAttribute_10调用测试PtrGetRealLocation对 UVM 返回成功,无问题。 - tests/ut/runtime/runtime/test/rt_utest_api.hpp — 新增
drvMemGetAttribute_10声明,无问题。 - tests/ut/runtime/runtime/test/rt_utest_api_common_defination.cc — 新增
drvMemGetAttribute_10stub(同 910B 版本),无问题。
结论:0 个 P0/P1/P2/P3 问题,此变更风险低,可以合入。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| ** | ✅ gcw_kUomxQ2l, 卢煜坤 (2/2) | ✅ gcw_kUomxQ2l (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
YzQnWyx, thanks for your pull request. All authors of the commits have signed the CLA. 👍


compile


流水线任务触发成功
任务链接 [609fb40c998948da89c2a01d8a167cf4][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| UT_Test_acl | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_v201 | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_c | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_david | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_910b | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_common | ✅ SUCCESS | >>>>> | |
| UT_Test_platform | ✅ SUCCESS | >>>>> | |
| UT_Test_qs | ✅ SUCCESS | >>>>> | |
| UT_Test_aicpusd | ✅ SUCCESS | >>>>> | |
| UT_Test_tsd | ✅ SUCCESS | >>>>> | |
| UT_Test_error_manager | ✅ SUCCESS | >>>>> | |
| UT_Test_slog | ✅ SUCCESS | >>>>> | |
| UT_Test_atrace | ✅ SUCCESS | >>>>> | |
| UT_Test_adump | ✅ SUCCESS | >>>>> | |
| UT_Test_mmpa | ✅ SUCCESS | >>>>> | |
| PreSmoke_A900_npupool | ✅ SUCCESS | >>>>> | |
| UT_Test_msprof | ✅ SUCCESS | >>>>> | |
| UT_Test_rts_report | ✅ SUCCESS | >>>>> | |
| UT_Test_msprof_report | ✅ SUCCESS |
[2026-07-25 10:34:18] CI执行结束


流水线任务触发成功
任务链接 [5a33c06658dc490f844cc3031125d61e][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| codecheck_Check_Pr | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| codecheck_precommit | ⚠️ WARNING | >>>>> | >>>>> |
| StaticCheck_codespell_check | ✅ SUCCESS | ||
| StaticCheck_link_validity_check | ✅ SUCCESS | ||
| StaticCheck_resource_existence_check | ✅ SUCCESS | ||
| StaticCheck_tag_closed_check | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS |
[2026-07-25 10:18:37] CI执行结束


🟡 Medium Priority
变更文件 src/runtime/driver/npu_driver_mem.cc 中,PtrGetAttributes(第 2116-2121 行)已将 DV_MEM_SVM_DEVICE、DV_MEM_SVM_HOST、DV_MEM_SVM 的 location type 从原来的 RT_MEMORY_LOC_MANAGED 分别改为 RT_MEMORY_LOC_DEVICE、RT_MEMORY_LOC_HOST、RT_MEMORY_LOC_DEVICE。但同一文件中的 PointerGetAttributes(第 2037-2045 行,未被此次 diff 修改)仍然将这些 SVM 类型映射为 RT_MEMORY_LOC_MANAGED。这两个函数服务于不同的调用者(rtPointerGetAttributes 公开 API vs rtPtrGetAttributes 内部 API),如果设计上要求它们对同种内存类型返回一致的 location type,则此处存在遗漏。否则调用者根据所选 API 不同将得到矛盾的 location type,可能导致内存释放校验(如 DevMemFree 中的 locationType != RT_MEMORY_LOC_DEVICE && locationType != RT_MEMORY_LOC_MANAGED 检查)或拷贝方向校验出现非预期行为。
建议:确认 PointerGetAttributes 是否需要同步更新 SVM 分类逻辑。如果 PointerGetAttributes(rtPointerGetAttributes 公开 API)有意保持向后兼容而维持 SVM → MANAGED 的映射,建议添加注释说明两个函数的分类差异是设计如此;否则应同步修改 PointerGetAttributes 中 SVM_DEVICE/SVM_HOST/SVM 的 locationType 赋值以与 PtrGetAttributes 保持一致。


/lgtm


/approve


Pull Request
描述
修复acl对外获取地址属性时的错误type以及修正内部对于loc_type在部分驱动返回值的映射逻辑。
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。