Pull Request已成功合入, 合并人@CANN-robot
(感谢 tangqunzhang 的贡献)变更摘要
本次 PR 回退了 PR #4299「统一HCCL零拷贝判断使用 IsGraphFeatureMapRefreshable」的改动。原 PR 将 HCCL 零拷贝判断从手动检查 root_graph->GetGraphUnknownFlag() 改为使用 IsGraphFeatureMapRefreshable(),并扩展到静态 shape 场景,但导致 pa_remapped_test_001 测试失败:feature map 可刷新时 data 节点内存被错误分类为 FIXED_FEATURE_MAP 而非 INPUT。本次回退将零拷贝判断逻辑恢复到基于动态 shape 静态子图的手动检测方式,并从 MarkReuseZeroCopyBlockFlag 与 IsNodeAndPeerNodeTaskSupportZeroCopy 两个函数中移除 is_feature_map_refreshable 参数。
主要改动
- 函数签名回退:
MarkReuseZeroCopyBlockFlag和IsNodeAndPeerNodeTaskSupportZeroCopy移除is_feature_map_refreshable参数,所有调用处同步去除该实参(涉及block_mem_assigner.cc、block_mem_zero_copy.cc、block_mem_zero_copy.h) - HCCL 零拷贝判断逻辑回退:
IsNodeSupportZeroCopy中由IsGraphFeatureMapRefreshable()统一判断回退为手动检查is_dynamic_shape_sub_graph(通过root_graph->GetGraphUnknownFlag()与子图GetGraphUnknownFlag()组合判定),仅在动态 shape 静态子图场景下才使用IsHcomNodeNotSupportAddrRefresh排除 HCCL 算子 - Data 节点直连判断简化:
MarkReuseZeroCopyBlockFlag中 data 节点的零拷贝拒绝条件由原来的(!is_feature_map_refreshable)改为无条件判断,同时将硬编码的kTaskUnsupportZeroCopyOp集合(含STREAMSWITCH、LABELSWITCHBYINDEX)替换为通用函数IsNodeSupportZeroCopy() - 移除特征图可刷新早期返回:
IsNodeAndPeerNodeTaskSupportZeroCopy中删除了当is_feature_map_refreshable为 true 时直接返回 true 的短路逻辑,确保所有场景均走完整的节点和 peer 节点零拷贝支持性检查 - 单元测试同步调整:
IsZeroCopyBlock_refreshable_unsupport_hccl重命名为IsZeroCopyBlock_support_hccl,期望值由false改为true;IsZeroCopyBlock_unsupport_hccl_dynamic_static_subg简化了子图结构并移除 data 节点相关断言;IsZeroCopyBlock_unsupport_rts补充了ge.featureBaseRefreshable选项;MarkReuseZeroCopyBlockFlag调用处去除末位参数


🤖 本次改动均为数据 / 生成 / 二进制文件(如测试用例、锁文件、媒体资源),没有可审查的代码逻辑,已跳过 AI 代码审查。


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.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/ge | ✅ 张德鹏, yuht9, hugo111 (3/2) | ✅ 张德鹏 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
tangqunzhang, thanks for your pull request. All authors of the commits have signed the CLA. 👍


Pull Request
描述
修正动态shape静态子图场景下HCCL零拷贝判断逻辑。
问题:
IsGraphFeatureMapRefreshable在动态shape静态子图场景下,hccl判断时还未拆图,导致判断结果与实际执行阶段不一致。另外静态子图里hccl支持刷新会有性能劣化,hccl内部会做数据拷贝等额外处理。修改方案:
is_feature_map_refreshable参数传递,恢复使用IsHcomNodeNotSupportAddrRefresh+is_dynamic_shape_sub_graph判断MarkReuseZeroCopyBlockFlag移除data_connect_unsupport_zero_copy检查逻辑(动态shape静态子图data,ge执行流程没有对输入做拷贝处理,只能按支持零拷贝处理)同时构造动态shape两个静态子图HCCL零拷贝ST用例:
变更文件
block_mem_zero_copy.cc:IsNodeSupportZeroCopy使用is_dynamic_shape_sub_graph判断;MarkReuseZeroCopyBlockFlag移除is_feature_map_refreshable参数和data_connect_unsupport_zero_copy检查逻辑;IsNodeAndPeerNodeTaskSupportZeroCopy移除is_feature_map_refreshable参数block_mem_zero_copy.h:同步函数签名修改block_mem_assigner.cc:IsZeroCopyBlock和两处MarkReuseZeroCopyBlockFlag调用移除is_feature_map_refreshable_参数block_mem_assigner_unittest.cc:适配函数签名变更test_fm_memory_refresh.cc:新增动态shape静态子图HCCL零拷贝ST用例变更类型
关联的Issue
如何测试
make -C cmake-build-gcov ut_libge_distinct_load_utest--gtest_filter=*IsZeroCopyBlock*bash build.sh --ge_executortest_fm_memory_refresh --gtest_filter=*HcclZeroCopy*核对清单
其他信息
dump相关修复已拆分到独立PR #4390。