Pull Request已成功合入, 合并人@CANN-robot
(感谢 RocketHcgs 的贡献)变更摘要
本次变更新增了 HcclSymWinGetRemoteMem 接口,用于在 URMA(统一远程内存访问)模式下获取远端对称内存地址。同时将 URMA 相关逻辑从原有的 HcclSymWinGetPeerPointer 函数中剥离出来,使两个接口各自职责清晰:HcclSymWinGetPeerPointer 处理常规对称内存模式,HcclSymWinGetRemoteMem 专门处理 URMA 模式的远端内存访问。
主要改动
-
新增
HcclSymWinGetRemoteMem接口声明:在include/hccl/hccl_sym_win.h头文件中新增了该函数的声明与文档注释,参数签名与HcclSymWinGetPeerPointer一致(winHandle、offset、peerRank、ptr)。 -
新增
HcclSymWinGetRemoteMem实现:在src/legacy/ascend910/framework/device/framework/aicpu_symmetric_memory.cc中实现该函数,包含对remoteMems有效性、peerRank范围、远端内存地址/类型、offset边界的完整校验,以及最终远端指针的计算。 -
重构
HcclSymWinGetPeerPointer中的 URMA 处理逻辑:将原本位于该函数内的 URMA 分支代码(约 16 行)替换为简单的模式检测与警告返回,URMA 场景下不再从此函数获取指针,改由新的HcclSymWinGetRemoteMem处理。


代码审查
审查总结
各文件审查结果
| 文件 | 审查结果 |
|---|---|
include/hccl/hccl_sym_win.h |
1 个 P3 问题(注释文档类型名错误) |
src/legacy/ascend910/framework/device/framework/aicpu_symmetric_memory.cc |
2 个 P1 问题 + 1 个 P2 问题 |
按严重程度统计
- P1: 2 个 —
HcclSymWinGetPeerPointer和HcclSymWinGetRemoteMem均在模式不匹配时返回HCCL_SUCCESS但未设置输出指针*ptr,违反 API 契约,可能导致调用方使用未初始化指针。 - P2: 1 个 —
HcclSymWinGetRemoteMem内部三条日志消息仍引用旧函数名[HcclSymWinGetPeerPointer](复制粘贴遗留),会误导问题定位。 - P3: 1 个 — 头文件注释中类型名 "u_integer" 应为 "uint32_t",表述 "identifying the identify" 冗余。
整体风险评估
中高风险。 两个 P1 问题涉及 API 契约违反:函数在不符合预期模式时仍返回成功但不设置输出参数。虽然生产调用方(aicpu_communicator.cc)因出参预初始化为 nullptr 且有后续空指针校验可在一定程度上拦截,但单元测试代码不检查返回值且不初始化出参,且作为公开 C API,该行为对任意调用方均构成隐患。建议在合入前修正两个 P1 问题(返回错误码或至少置 *ptr = nullptr),并修正 P2 日志函数名错误以避免线上排障混淆。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 1 |
⛔ 需要修改


/approve


/approve


描述
对称内存特性新增一个消息语义的获取远端内存地址的接口HcclSymWinGetRemoteAddr,HCCS/UB Memory等内存语义的device侧地址获取接口使用HcclSymWinGetPeerPointer,URMA和其他消息语义device侧获取地址接口使用HcclSymWinGetRemoteAddr接口,明确指定是远端交换过来的内存。
变更类型
请选择本次引入的变更类型:
关联的Issue
NA
测试
已完成的测试用例和场景:
补充的UT用例:见ut_aicpu_symmetric_memory.cc
文档更新
更新了HcclSymWinGetPeerPointer.md
新增了HcclSymWinGetRemoteAddr.md
合入检查