已合并
fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 #9190
yuanbin_22创建于 11 天前
fix: softmax_grad_ext fusion pass 代码审查修复(memcpy_s 安全函数)、quant_update_scatter 原型重构、leaky_relu mask 调整、tiling 告警消除及 classify_rule 测试分类调整 #9190
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 yuanbin_22 的贡献)11 天前 创建了 pull request,commit ebac1b56
atomgit-bot
11 天前 评论:
11 天前 评论:
变更摘要
本 PR 针对 activation/softmax_grad_ext/op_graph/fusion_pass/softmax_grad_ext_fusion_pass.cpp 中的 SoftmaxGradExt 融合算子图构建逻辑进行修复与加固(PR 标题提及的"补充文件末尾换行符"对应其余文件的改动)。核心内容包括:用 memcpy 替代 reinterpret_cast 安全读取 ReduceSum 的 axes 数据,修正日志格式符以匹配 int64_t 类型,为建图阶段 es::AddEdgeAndUpdatePeerDesc 调用补充 ES_ASSERT_GRAPH_SUCCESS 返回值检查,并将魔法数字 3UL 抽取为具名常量 kMinSubgraphInputCount 用于子图输入数量校验。
主要改动
- 安全读取 axes 数据: 在
GetAxisFromReduceSum中,将原先通过reinterpret_cast解引用读取DT_INT64/DT_INT32数据的方式改为先经memcpy拷贝到局部变量再赋值给axis_value,规避潜在的对齐/严格别名问题。 - 修正日志格式符: 将
ReduceSum axis的日志格式从%ld调整为%lld,与int64_t类型的axis_value保持一致。 - 建图调用增加返回值检查: 在
BuildBinaryNode和BuildPatternReduceSum中,用ES_ASSERT_GRAPH_SUCCESS包装es::AddEdgeAndUpdatePeerDesc调用,对建边失败进行显式断言处理。 - 抽取输入数量常量: 新增常量
kMinSubgraphInputCount = 3UL,替换SoftmaxGradExtReplacementCommon中校验子图输入数量的魔法数字3UL,使校验逻辑更清晰可维护。


atomgit-bot
11 天前 评论:
11 天前 评论:
11 天前 添加了label:stat/needs-squash
11 天前 添加了label:cann-cla/yes
此处折叠了115条消息 查看更多
范其瑞
5 天前 评论:
5 天前 评论:
/lgtm
/approve


5 天前 添加了label:lgtm
tang-lei01
5 天前 评论:
5 天前 评论:
/approve


5 天前 添加了label:approved
5 天前 合入了pull request
描述
本 PR 涵盖 softmax_grad_ext fusion pass 代码审查问题修复、quant_update_scatter 算子原型重构、leaky_relu arch35 内核 mask 计算调整、tiling prepare 函数未使用参数告警消除、以及 classify_rule.yaml 测试分类规则调整。共涉及 6 个文件(+150 -94 行)。
涉及文件
activation/softmax_grad_ext/op_graph/fusion_pass/softmax_grad_ext_fusion_pass.cppclassify_rule.yamlindex/quant_update_scatter/op_host/quant_update_scatter_def.cppquant/dynamic_block_quant/op_host/dynamic_block_quant_tiling.cppquant/dynamic_mx_quant/op_host/arch35/dynamic_mx_quant_tiling_arch35.cppactivation/leaky_relu/op_kernel/arch35/leaky_relu_dag.h变更内容
1. softmax_grad_ext fusion pass 代码审查修复
GetAxisFromReduceSum中reinterpret_cast直接解引用改为memcpy_s(安全函数)拷贝到本地变量,并使用OP_LOGE_IF检查memcpy_s返回值是否为EOK#include "securec.h":引入memcpy_s/EOK定义axis_value(int64_t)的格式符从%ld改为%lldAddEdgeAndUpdatePeerDesc调用使用ES_ASSERT_GRAPH_SUCCESS宏包装kUnknownShapeDim、kReduceLastAxis、kAxesShapeDim、kPatternV2VariantCount、kBinaryInputX1Idx、kBinaryInputX2Idx、kReduceSumInputXIdx、kNodeOutputIdx、kTargetSocVersion)Ascend950改为引用kTargetSocVersion常量2. quant_update_scatter 算子原型重构
将
QuantUpdateScatter类中各输入/输出的内联DataType/Format/UnknownShapeFormat向量提取为文件级static const命名向量(varDataType、indicesDataType、updatesDataType、quantScalesDataType、quantZeroPointsDataType、inputAndOutputFormat),消除重复代码,提升可维护性。3. leaky_relu arch35 内核 mask 计算调整
constexpr uint64_t VECTOR_REG_WIDTH = 256UL(使用全局定义)Reg::UpdateMask从循环外移入循环内,确保每次迭代 mask 与实际剩余元素匹配,避免最后一次循环处理越界4. tiling prepare 函数未使用参数告警消除
dynamic_block_quant和dynamic_mx_quant的TilingPrepare函数中context参数未使用,添加[[maybe_unused]]属性消除编译告警,并格式化函数体。5. classify_rule.yaml 测试分类调整
将以下算子的测试代码从
activation-c@ops-nn(已发布分类)移至VC1@ops-nn(未发布分类),并取消原 VC1 中的注释标记:elu、elu_grad_v2、fast_gelu、fast_gelu_gradge_glu_grad_v2、ge_glu_v2、gelu、gelu_grad、gelu_grad_v2、gelu_quant、gelu_v2hardtanh_grad、leaky_relu、leaky_relu_grad、p_relu、relu、relu_gradsigmoid、sigmoid_grad、silu_grad、swi_glu_grad、swish、swish_gradascend_quant关联的Issue
https://gitcode.com/cann/ops-nn/issues/1323
测试
文档更新
不涉及
类型标签
AI/Agent生成声明