| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(expint): 算子质量加固——x=+inf修复+TPL移除+双缓冲+产品表修正 Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !5679 merge codex/expint-hardening into master fix(expint): 算子质量加固——x=+inf修复+TPL移除+双缓冲+产品表修正 Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 变更说明 Expint 转测共性问题与编码红线修复 + 检视意见修复(11 文件,+489/-624)。 ### 修改清单(问题 → 修复) | 修改 | 对应问题 | |------|---------| | op_kernel/expint_kernel.h:边界比较基准由钳制后的 xFp32 改为原始输入 xInput(x<0→NaN / x=+inf→+inf / x=0→-inf 三链)+ 新增 x>88 恒等变形重算通道 Ei(x)=exp(x-88)·(e^88/x)·S(x);双缓冲 BUFFER_NUM 1→2(FP32 路径 initBuf 流式 + SetFlag/WaitFlag 显式同步,FP16/BF16 走 TQue 内建同步);TPipe 成员改为 TPipe* 指针经 Init 传入 | 编码红线 P1:x=+inf 死分支(钳制后 xFp32 恒 ≤88,+inf 判断永不触发)+ 检视 TOPK-6(x∈(88,93.2] 有限大值输出恒为 Ei(88),错一个数量级)+ 检视 PERF-3(FP32 路径 MTE2/Vector 零重叠)+ zhanw_coding 检视(TPipe 类外定义利于常量折叠,cdist/cummin/dense_bincount 同款指针传入模式) | | op_kernel/arch35/expint_tiling_key.h 删除(kernel 改 DTYPE_X 标准实例化 + REGISTER_TILING_DEFAULT) | 编码红线 P1:TPL 模板入参非标机制,全仓孤例且 dtype 双真值源(转测第 7 项 baseline FAIL) | | op_kernel/expint_apt.cpp → expint.cpp + def.cpp opFile 同步;入口补 KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_AIV_ONLY);TPipe 入口函数栈上定义后指针传入 | 编码红线 P1:_apt 非标命名(仓内最新波次均为无后缀);AIV 标记为仓内惯例对齐(同类逐元素算子 acos/sin/tanh/erf 等 11/12 均有,最新模板标配) | | op_graph/expint_proto.h:**保持原始接口不动**(TensorType 仍为 {BF16,FP16,FLOAT,DOUBLE},与 master 逐字节一致) | tang-lei01 检视意见"double不能去掉":proto 为接口类型族声明(图类型检查层),def.cpp 为内核注册层(FP16/FP32/BF16),两层各司其职 | | op_host/arch35/expint_tiling_arch35.cpp:新增 CheckFormat() 运行时 ND 校验 + SetBlockDim 返回值校验 + UB 缓冲预算与双缓冲布局对齐 + MAX_COPY_BYTES=65535 防 blockLen(uint16_t) 回绕 + TPL 参数删除配套 | 转测 10-格式(REVIEW→纵深防御:TTK 实测 GE 对 vendor 算子自动转换而非拒绝,算子侧显式兜底)+ 检视 TOPK-1 + SEC-8.4 + PERF-3 配套 | | op_host/expint_infershape.cpp:局部变量命名改小驼峰 | 检视 GEN 命名规范 | | README.md:产品表 A2 ×→√(ascend910b ini 有 [Expint] 注册)+ 约束说明补全(不支持 DOUBLE / 边界语义 / Shape 推导 / 0~8 维含标量空 Tensor 动态 Shape / 非连续自动转换)+ 调用说明同步样例路径并补动态 shape 条目 | 转测 15.1 产品(FAIL)+ 15.4 缺约束(FAIL)+ 15.2 非连续(WARN)+ zhanw_coding 检视(改 example 须同步 README) | | examples/CMakeLists.txt 删除 | zhanw_coding 检视:框架 build_example.sh 原生支持编译(ascend950 下自动发现 examples/ 与 examples/arch35/),仓内非 experimental 算子无一自带 example CMakeLists | | examples/test_geir_expint.cpp(扁平旧样例)删除,重写迁入 examples/arch35/test_geir_expint.cpp | 仓内布局惯例(dawsn/ndtri/log_space_d 样例均在 arch35);本算子仅注册 950,扁平路径无意义 | | examples/arch35/test_geir_expint.cpp(重写 300 行):14 值输入覆盖全 7 区间+特殊值+x>88 修正路径;memcpy_s→std::copy 去 securec 依赖;手写 GetDataTypeSize→ge::GetSizeByDataType;校验补 isinf 分支;位域常量具名、session nothrow | 转测 5-GEIR"校验输出"验收标准(原样例只跑不验)+ zhanw_coding 检视(GetSizeByDataType)+ 框架链接兼容(框架命令不含 -lc_sec)+ isinf 为真机实测暴露的存量校验缺陷(dump 逐元素 16/16 全对证明 kernel 无错)+ 检视 GEN/SEC 系列 | | examples/arch35/test_geir_expint_dynamic.cpp(新增 205 行,自包含单文件):-1 未知维 ×3 组 / -2 未知 Rank ×4 组(含 rank-0 标量),同图同 Session 多 shape 实跑校验;v1 ge::Session+ge::Tensor | 转测 5-GEIR 硬性要求(def 声明 DynamicShapeSupportFlag/DynamicRankSupportFlag,须有 -1/-2 可执行证明,无此样例该项停留 REMEDIATE)+ 框架链接兼容(框架命令不含 -lge_runner_v2,对齐 log_space_d 等 4/6 仓内动态样例的 v1 自包含惯例) | ### 接口分层说明(DT_DOUBLE 处理) proto 的 TensorType 是接口类型族声明,保持与上游原始定义一致(含 DT_DOUBLE);def.cpp 的 DataType 是内核注册层(FP16/FP32/BF16,与原始版一致未改动);未注册的 dtype 在选核阶段被明确拒绝。两层各司其职。 ### 仓外项说明 - ini 残留:位于 canndev 仓,非本仓修改范围 - golden 交付件与用例补充:归档于 operator-artifacts 仓(PR#93/PR#133) ## 验证 - 框架原生编译命令(g++ -lgraph -lge_runner -lgraph_base -lge_compiler)两样例编译通过 - 真机:静态样例全 PASS;动态样例 7/7(-1 ×3、-2 ×4 含 rank-0 标量) - build.sh --ops=expint --soc=ascend950 编译通过;pre-commit 全钩子绿(clang-format 18.1.8 / codespell / OAT) - TTK 两方 324/324、三方 GEIR 313/324(剩余 11 条为 fp32 中大 x 区间 rmse 存量特征,绝对误差 0.3% 优于两方阈值,详见归档报告) ## 关联的Issue - #3241 - #3335 See merge request: cann/ops-math!5679 | 1 个月前 |