已合并
增加jetty层simt接口 #177
增加jetty层simt接口 #177
已合并
suqwe创建于 21 天前
suqwe
suqwe成员
21 天前

当前PR是否有AI参与:

[x] 否

[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入**:

新增jetty层,simt直驱urma接口
提供灵活高性能的jetty层接口

该PR关联的issue

(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #
https://gitcode.com/cann/asc-comm/issues/21

希望检视人员了解:

改动类型 / Change Type

测试信息 / Testing

检查清单 / Checklist

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 suqwe 的贡献)
suqwesuqwe成员
21 天前 创建了 pull request,commit ad937fb2
atomgit-bot
atomgit-bot
21 天前 评论:

变更摘要

本 PR 在 Jetty 通信层新增 SIMT(单指令多线程)接口,并与已有 SIMD(AIV)Jetty 实现共享元数据 ABI。改动主要包括:新增公开头文件 include/aicore/hcomm/hcomm_jetty.h(SIMD 侧 AscendC::HcommJetty/HcommPeer)和 hcomm_jetty_simt.h(SIMT 侧 AscendC::simt::jetty::HcommJetty),并在 hcomm_simt.h 中引入 SIMT Jetty 头文件;在 src/aicore/jetty/jetty_simt_impl.h 中实现 SIMT Jetty(SQ 填充、AdvanceSq/PublishSq/Drain 等),在 src/aicore/hcomm/impl/platform_v310/hcomm_aiv_urma_jetty.h 中实现 AIV 侧 JettyImpl;同时新增完整的 examples/simt_jetty/ 示例(host 端 main.cpp、device 端 op_kernel.cpp 及 build.sh/run.sh/perf.sh/stress.sh 脚本),并重构了 SIMT URMA 的 ReservePost 接口。此外在 impl/comm_api/aicore/hcomm/impl/ 下新增若干包装头,将源树实现暴露到包式 include 路径。

主要改动

  • 新增 SIMT Jetty 公开接口:include/aicore/hcomm/hcomm_jetty_simt.h 定义 AscendC::simt::jetty::HcommJetty、HcommPeer、JettySge,提供 Write/WriteValue/WriteWithNotify/AdvanceSq/PublishSq/Drain 等模板接口,并复用 SIMD 侧 HcommJettyInfo 元数据结构。
  • 新增 SIMD Jetty 公开头与实现:hcomm_jetty.h 定义 HcommJettyInfo/HcommJettyPeerInfo/HcommPeer/HcommJetty(含 Write、WriteValue、WriteWithNotify、Drain、PublishSq),platform_v310/hcomm_aiv_urma_jetty.h 实现 JettyImpl 的 SQE 构建、CopySqeToSq、AdvanceSq、RingDoorbell 及 CQ 轮询逻辑,并用 static_assert 校验 SIMT/SIMD 元数据 ABI 一致。
  • 实现 SIMT Jetty 内核:src/aicore/jetty/jetty_simt_impl.h(约 836 行)实现 SQ 预留(ReserveImplicitSq/ReserveBatchSq)、按 warp/group 协作写入 SQE、PublishSq 发布 DWQE 及 Drain 轮询 CQ,并新增 src/aicore/utils/simt_utils.h 提供 HcommCoopThread/HcommCoopWarp/HcommCoopGroup 等协作原语。
  • 新增完整示例 examples/simt_jetty/:main.cpp 通过 HcclCommMemReg、HcclChannelAcquire 注册收发缓冲区并获取 Jetty 通道,以 marker 文件实现 host 端 barrier;op_kernel.cpp 提供 SimtJettyWriteThread/Group/Dispatch/Warp/Mixed 五种模式内核(含 __simt_vf__ 与 __mix__ 混合模式),build.sh 支持 SIMT_JETTY_SGE_NUM(1–12)与 CCE_RES_USAGE 配置,run.sh/perf.sh/stress.sh 支持多 rank 运行、正确性校验与设备时钟周期统计。
  • 重构 SIMT URMA 的 ReservePost:hcomm_simt_urma.h/hcomm_simt_urma_def.h 中将 ReservePost 由模板类型参数 Desc 改为模板 bool commit 加运行时 bbCnt 参数,删除各描述结构中的 cqeCnt 常量并以固定 1U 传入,简化 SQ 预留路径的 CQ 容量计算。
likedislike
不准确?
atomgit-bot
atomgit-bot
21 天前 评论:

代码审查

审查结论

各变更文件审查结果

  • examples/simt_jetty/CMakeLists.txt:no issues。构建脚本与 CMake 校验逻辑(SGE_NUM 格式、CMAKE_ASC_ARCHITECTURES、ASCEND_HOME_PATH 依赖)一致,find_package(ASC) 先于 project() 是自定义语言注册的常规顺序,未发现正确性问题。
  • examples/simt_jetty/build.sh:no issues。已使用 set -euo pipefail,所有变量均加引号,rm -rf -- "${build_dir}" 有 -- 保护且基于脚本目录,参数校验(res_usage / sge_num 正则)与 CMakeLists 一致。
  • examples/simt_jetty/main.cpp:2 个 finding(见下)。

发现汇总

  • P2 × 1:rank>=2 提前退出分支与按完整 nranks 参与的 HCCL 集合初始化(HcclCommInitRootInfo)和 HostBarrier(等待全部 ready.* marker)不一致。nranks>2 启动时,rank 0/1 会因缺少 rank>=2 进程参与而在 comm 初始化挂起,或屏障空转 60 秒后返回 HCCL_E_TIMEOUT,示例必然失败。修复方向:限定 nranks==2 或让跳过的进程也参与集合与屏障(置信度 0.65)。
  • P3 × 1:rank-1 的 expected 填充中存在不可达的 else 分支(mode 已在第 262 行校验为 [0,4] 且上方分支全覆盖),属误导性死代码,建议删除(置信度 0.8)。

整体风险判断

该 PR 是新增的示例程序(jetty 层 SIMT 接口演示),主体逻辑(参数解析、marker 文件握手、通道获取、数据校验)自洽,未发现数据损坏、内存越界或注入类高危问题。主要风险集中在多 rank 启动场景下的挂起/超时缺陷(P2),建议合入前明确并修复参与进程数的一致性;其余为可选的死代码清理,不影响正确性。


审查结论

变更文件逐一核查结果

  • examples/simt_jetty/op_kernel.cpp — 已审查。发现 2 个问题(见下方 F1/F2)。
  • examples/simt_jetty/perf.sh — 已审查。参数数量校验、引用传递、exec 委托 run.sh 均正确,无问题。
  • examples/simt_jetty/run.sh — 已审查。mode 与 kernel 分支映射(thread=0/group=1/dispatch=2/warp=3/mixed=4)与 op_kernel.cpp 的 LaunchSimtJetty switch 一致;nranks/iterations/warmup/sge_num 校验、mktemp 安全清理、退出码传播均正确,无问题。
  • examples/simt_jetty/simt_jetty_common.h — 已审查。static_assert 范围 [1,12] 与 kSlotCount=12 一致,无问题。
  • examples/simt_jetty/stress.sh — 已审查。无问题。
  • include/aicore/hcomm/hcomm_jetty.h — 已审查。发现 include 路径一致性风险(见 F3);结构体大小 static_assert 计算正确(PeerInfo 48B、Info 80B)。
  • include/aicore/hcomm/hcomm_jetty_simt.h — 已审查。为 JettyImpl 的转发封装,无独立问题。
  • include/aicore/hcomm/hcomm_simt.h — 已审查。新增 #include "hcomm_jetty_simt.h" 位置在内部头文件宏生命周期内,有独立 include guard,无问题。
  • src/aicore/hcomm/impl/hcomm_jetty_impl.h — 已审查。仅按 __NPU_ARCH__ == 3510 条件包含平台头,无问题。
  • src/aicore/hcomm/impl/hcomm_jetty_impl_def.h — 已审查。包含的 ../common/hcomm_inner_def.h 与 platform_v310/... 相对路径合理,无问题。

发现汇总

  • P0: 0 个
  • P1: 0 个
  • P2: 1 个
  • P3: 2 个

总体风险判断

该 PR 为新增的示例与 SIMT Jetty 公共头文件,逻辑主体(JettyImpl、WQE 处理)位于既有实现中,新增代码未发现高严重度缺陷。主要风险点是新公共头文件的 include 路径与新增 impl 文件落位之间的一致性(P2,置信度较低,受工作区树结构限制无法完全确认),以及示例代码对接口返回值的忽略和无超时自旋可能导致的错误结果或 kernel 挂死(P3)。整体风险可控,建议合入前核对 include 路径映射并补上示例中的返回值检查。


关闭总结

审查文件清单(7/7 均已审查)

  • src/aicore/hcomm/impl/hcomm_simt_jetty_impl.h — 纯 include 包装头,无实质问题(include 路径指向 comm_api 镜像树,与仓库既有布局一致,无法在本环境验证该树,未报)。
  • src/aicore/hcomm/impl/platform_v310/hcomm_aiv_urma_jetty.h — 发现 1 个 P1 问题(未定义标识符 kNumWriteWqebbs/kNumWriteWithNotifyWqebbs,v310 平台被既有 hcomm_jetty_impl.h 实际包含时编译失败);其余(owner 位计算、PollCq、CopySqeToSq 环绕拷贝、numBytes≤0xFFFFFFFF 校验)与 SIMD 既有实现一致。
  • src/aicore/hcomm/impl/platform_v310/hcomm_aiv_urma_jetty_def.h — 类声明,与实现文件签名一致,无问题。
  • src/aicore/hcomm/impl/platform_v310/hcomm_simt_urma.h — 发现 1 个 P3 问题(ReservePost 将 cqeCnt 硬编码为 1U,config.cqe==0 时 head 计数与 WQE 行为不一致,属潜在契约弱化);描述符 cqeCnt 删除与 ReservePost 签名改动在 .h/_def.h/调用点三处一致。
  • src/aicore/hcomm/impl/platform_v310/hcomm_simt_urma_def.h — ReservePost 声明与 .h 同步修改,无问题。
  • src/aicore/jetty/jetty_simt_impl.h — 发现 2 个 P2 问题(JettySge::len 有符号 int 导致 ≥2^31 合法长度被静默判无效丢弃;WriteWithNotify 的 uint64_t len 无上界检查截断为 int);批次预留/发布状态机(ReserveBatchSq/AdvanceBatch/AdvanceImplicitSq/PublishSq)逐条核对未发现确定性错误。
  • src/aicore/utils/simt_utils.h — deduplicate、warp_inclusive_sum 等指令级实现正确,无问题。

按优先级统计

  • P0:0
  • P1:1(hcomm_aiv_urma_jetty.h 未定义常量,编译破坏,置信度 0.75)
  • P2:2(SIMT Jetty 长度处理两个边界缺陷)
  • P3:1(SIMT URMA CQE 计数契约弱化,置信度 0.55)

总体风险判断
本次 PR 新增约 1400 行 SIMT/SIMD Jetty 内核代码(队列预留、WQE 填充、doorbell 发布、CQ 轮询等高风险并发逻辑),且未附带任何测试改动。最确定的问题是 AIV 侧常量未定义导致的 v310 平台编译风险;SIMT 侧两个长度边界缺陷属于特定输入(≥2^31 或 ≥2^32 字节)下才触发的静默数据错误,与 AIV 侧已有的显式上界校验形成明显不一致。建议修复 P1/P2 后合入,并为新的 jetty 发布/轮询路径补充针对性测试。

类型 数量
🔴 阻塞 1
🟡 建议 1

⛔ 需要修改

likedislike
不准确?
CANN-robotCANN-robot成员
21 天前 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
21 天前 添加了label:cann-cla/yes
此处折叠了178条消息 查看更多
suqwesuqwe成员
14 天前 修改了pull request 的描述
suqwesuqwe成员
14 天前 修改了pull request 的描述
mlidongfeng
mlidongfeng成员
14 天前 评论:

/approve

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