已合并
[feat] 支持HcclSymWinGetRemoteAddr接口 #4430
RocketHcgs创建于 8月5日
[feat] 支持HcclSymWinGetRemoteAddr接口 #4430
已合并
RocketHcgs创建于 8月5日
RocketHcgs
RocketHcgs成员
8月5日

描述

对称内存特性新增一个消息语义的获取远端内存地址的接口HcclSymWinGetRemoteAddr,HCCS/UB Memory等内存语义的device侧地址获取接口使用HcclSymWinGetPeerPointer,URMA和其他消息语义device侧获取地址接口使用HcclSymWinGetRemoteAddr接口,明确指定是远端交换过来的内存。

变更类型

请选择本次引入的变更类型:

关联的Issue

NA

测试

已完成的测试用例和场景:

  1. UT验证
  2. 模拟运行器验证

补充的UT用例:见ut_aicpu_symmetric_memory.cc

文档更新

更新了HcclSymWinGetPeerPointer.md
新增了HcclSymWinGetRemoteAddr.md

合入检查

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 RocketHcgs 的贡献)
RocketHcgsRocketHcgs成员
8月5日 创建了 pull request,commit 1e777a52
atomgit-bot
atomgit-bot
8月5日 评论:

变更摘要

本次变更新增了 HcclSymWinGetRemoteMem 接口,用于在 URMA(统一远程内存访问)模式下获取远端对称内存地址。同时将 URMA 相关逻辑从原有的 HcclSymWinGetPeerPointer 函数中剥离出来,使两个接口各自职责清晰:HcclSymWinGetPeerPointer 处理常规对称内存模式,HcclSymWinGetRemoteMem 专门处理 URMA 模式的远端内存访问。

主要改动

  • 新增 HcclSymWinGetRemoteMem 接口声明:在 include/hccl/hccl_sym_win.h 头文件中新增了该函数的声明与文档注释,参数签名与 HcclSymWinGetPeerPointer 一致(winHandleoffsetpeerRankptr)。

  • 新增 HcclSymWinGetRemoteMem 实现:在 src/legacy/ascend910/framework/device/framework/aicpu_symmetric_memory.cc 中实现该函数,包含对 remoteMems 有效性、peerRank 范围、远端内存地址/类型、offset 边界的完整校验,以及最终远端指针的计算。

  • 重构 HcclSymWinGetPeerPointer 中的 URMA 处理逻辑:将原本位于该函数内的 URMA 分支代码(约 16 行)替换为简单的模式检测与警告返回,URMA 场景下不再从此函数获取指针,改由新的 HcclSymWinGetRemoteMem 处理。

likedislike
atomgit-bot
atomgit-bot
8月5日 评论:

代码审查

审查总结

各文件审查结果

文件 审查结果
include/hccl/hccl_sym_win.h 1 个 P3 问题(注释文档类型名错误)
src/legacy/ascend910/framework/device/framework/aicpu_symmetric_memory.cc 2 个 P1 问题 + 1 个 P2 问题

按严重程度统计

  • P1: 2 个 — HcclSymWinGetPeerPointerHcclSymWinGetRemoteMem 均在模式不匹配时返回 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

⛔ 需要修改

likedislike
RocketHcgsRocketHcgs成员
8月5日 设置为草稿状态
CANN-robotCANN-robot成员
8月5日 添加了label:cann-cla/yes
此处折叠了227条消息 查看更多
zangyan成员
10 天前 评论:

/approve

likedislike
57_Viking
57_Viking成员
10 天前 评论:

/approve

likedislike
严正行
严正行成员
10 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
10 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
10 天前 合入了pull request