| Files | Last commit | Last update |
|---|---|---|
slice_with_axes, slice_last_dim README Co-authored-by: zhoulong50_hw<zhoulong50@huawei.com> # message auto-generated for no-merge-commit merge: !4475 merge slice_docs into master slice_with_axes, slice_last_dim README Created-by: zhoulong50_hw Commit-by: zhoulong50_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 补充算子 README 文档,并补充 geir 调用 examples ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2536 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 二级冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了 README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4475 | 3 months ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
Math仓算子适配Ascend350平台 Co-authored-by: huairuchen<chenhuairu@huawei.com> # message auto-generated for no-merge-commit merge: !6372 merge dvlite-math-350-adapt into master Math仓算子适配Ascend350平台 Created-by: huairuchen Commit-by: huairuchen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Math仓部分随机数算子在350平台进行适配 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/4202 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 算子泛化测试,冒烟测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6372 | 12 days ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago |
SliceLastDim
English | 简体中文
Product Support Status
| Product | Supported |
|---|---|
| Ascend 950PR&950DT products | √ |
| Atlas A3 products | √ |
| Atlas A2 products | √ |
| Atlas 200I/500 A2 inference products | √ |
| Atlas inference products | × |
| Atlas training products | √ |
Function Description
-
Operator function: slices the last dimension of the input tensor, with the slice range specified by
startandendand the step bystride. -
Computation example:
- Input x shape = (2, 3, 10), start = 0, end = 10, stride = 2
- Output y shape = (2, 3, 5)
- y[i, j, k] = x[i, j, start + k * stride] = x[i, j, 2 * k]
-
Computation formula: The shape of the output y is the same as that of the input x, except that only the last dimension becomes:
y.shape[-1] = ceil((end - start) / stride) y[..., k] = x[..., start + k * stride]startandendsupport negative indexing (relative to the length of the last dimension);startis clamped to [0, lastDim], andendis clamped to [0, lastDim].
Parameter Description
| Parameter Name | Input/Output/Attribute | Description | Data Type | Data Format |
|---|---|---|---|---|
| x | Input | Input tensor. | INT8, INT16, INT32, INT64, FLOAT16, FLOAT, BFLOAT16 | ND |
| y | Output | Output tensor, with the same data type and format as x. |
Same as x |
ND |
| start | Attribute | Start index of the last-dimension slice; negative indexing is supported. | INT | - |
| end | Attribute | End index of the last-dimension slice; negative indexing is supported. | INT | - |
| stride | Optional Attribute | Slice step, which defaults to 1 and must be >= 1. | INT | - |
Constraint Description
- The rank of the input tensor
xis in the range [1, 8]. stridemust be >= 1; when the output is non-empty,stridemust additionally satisfy stride < 2^40, otherwise it is rejected during the Host Tiling stage.startandendsupport negative indexing; a negative value is converted to a positive index by adding the length of the last dimension;startis clamped to [0, lastDim], andendis clamped to [0, lastDim].- Empty-axis input is supported: when a non-last dimension of
xis 0, or the slice result is empty (e.g. end <= start), the output is an empty tensor of the corresponding shape: the Host-side Tiling returns via a short-circuit path, and the Kernel directly skips the copy. - Row-stride upper bound: the row stride of the continuous copy, i.e. (input last-dimension length - output last-dimension length) x the number of bytes of the data type, must be less than 2^40 bytes.
- Dynamic shape support: dynamic Shape (dimensions marked as -1) and dynamic-compile-static are supported: a non-last -1 dimension is propagated to the output as-is, and when the last dimension is -1, the output last dimension is inferred as -1. An unknown-rank input (shape marked as -2) is passed through with an unknown-rank output, and the final shape is derived at runtime from the actual input.
Exception Validation
| Violation | Validation Stage | Error Behavior |
|---|---|---|
The rank (number of dimensions) of x is not in [1, 8] |
Graph-compilation inference / Host Tiling | Returns GRAPH_FAILED, presenting EZ0012 and recording the shape-dim validation log |
| stride < 1, or stride >= 2^40 when the output is non-empty | Graph-compilation inference / Host Tiling | Returns GRAPH_FAILED, presenting EZ0026 and recording the stride validation log |
The data type of x is not in the supported set (INT8, INT16, INT32, INT64, FLOAT16, FLOAT, BFLOAT16) |
Graph-compilation inference / Host Tiling | Returns GRAPH_FAILED, presenting EZ0020 and recording the dtype validation log |
Note: Error codes are wrapped by graph compilation or the running framework upon validation failure; different integration paths may only return GRAPH_FAILED while keeping the detailed logs. Some invalid inputs may be intercepted by framework-level checks before reaching operator validation (e.g.
E80012on some paths for rank out-of-range), in which case the framework-level code takes precedence.
Invocation Description
| Invocation Method | Invocation Sample | Description |
|---|---|---|
| Graph-mode invocation | test_geir_slice_last_dim | Invokes the SliceLastDim operator by building a graph through the operator IR. |