| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !11381 merge reland/indexcheck-fixes-v2 into master fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 描述 按**最小必要范围**重新提交 PR #10445 的缺陷修复(8 文件,+137/-90)。每处修改均可追溯至有编号的检视(ascendc-code-review)或准入扫描(ops-admission-scan)发现;**不含** config/ascend950/index_check_binary.json,并按导师对兼容性交付算子的整改指引撤除了无 finding 支撑的改动。 ## 逐文件改动与目的 | 文件 | 改动 | 解决的问题(发现编号/依据) | |---|---|---| | op_kernel/index_check.h | ① 4 处 ascendc_assert→Trap() ② bounds 经 DataCopyPad 搬入 UB 后 LocalTensor 读取(新增 boundsTableBuf_,构造顺序 InitParams→InitBuffers→InitBounds)③ TensorList 地址表改裸指针模式 ④ int64 实例 5 个向量队列 if constexpr 条件化(不分配) | ① **编码红线 P1(检视 FAIL 80%)**:ascendc_assert 在 NDEBUG 下展开为空,Release 编译越界检测退化为 no-op,算子唯一功能失效 ② **红线 API-1(FAIL 80%)**:生产代码 3 处 GlobalTensor::GetValue(API 黑名单,GM 逐元素访问性能极差)③ 同 API-1 ④ **红线 TIL-3(FAIL 80%)**:int64 实例向量队列分配后零读写,占 UB 预算 71.4%,maxBatchSize 被压至 1/3.5 | | op_kernel/index_check.cpp | TILING_KEY_IS(0)/(1) 宏分发简化为模板直分 | TIL-3 配套:int64 恒走标量路径后宏分支不可达(死分支) | | op_host/index_check_tiling.cpp | ① TilingIndexCheck/TilingPrepareForIndexCheck 入口 context 判空前移 ② bounds 一维/长度校验(GetDimNum()!=1 \|\| GetDim(0)!=tensorId_ 拒绝)③ int64 预算 28B→8B/元素(indicesDtype_)④ SetBlockDim 返回值检查 ⑤ ubSize 无符号下溢修复(原 ubSizePlatform - SCALE_SPACE 在平台 UB<20480 时下溢为极大值,使下限检查失效)⑥ Arch35 硬编码日志去除 ⑦ 未用 include 清理 | ① **红线 RL-6/GEN-1.1(FAIL 70%)**:OP_LOGD(context->GetNodeName()) 在判空前解引用 ② **共性问题 11 维度+15.4(扫描 FAIL)**:spec 声明 rank_range:[1,1] 代码未实现,2-D bounds 元素数巧合时边界语义错位 ③ TIL-3 配套(maxBatchSize 8336→29184)④ **红线 TOPK-1(FAIL 85%)**:SetBlockDim 失败后 tiling 仍返 SUCCESS,kernel 按错误核数启动→部分索引静默漏检 ⑤ 基线真实缺陷 ⑥ SEC-8.4 ⑦ GEN-2.3 | | op_host/index_check_tiling.h | 魔鬼数字 8 → MAX_TENSOR_NUM 常量 | GEN-4.2(检视发现) | | op_api/index_check.cpp | ① 入口判空补 executor;IsAiCoreSupport 逐张量判空 ② bounds->Size() 传 %zu 加 static_cast<size_t>(2 处)③ 超限日志补上限值 ④ MAX_DIM_LEN→MAX_TENSOR_NUM(名实一致)、常量小驼峰 ⑤ 删 2 个未用 include | ① GEN-1.1(SUSP 70%):空指针 UB ② SEC-1.3:C 标准 varargs UB ③ SEC-8.4:排障日志缺关键值 ④ GEN-4.3/style1.4 ⑤ GEN-2.3 | | README.md | ① 950PR/950DT 行 ×→√ ② 补 4 条约束声明(rank≤8、列表非空、空张量跳过、空列表双路径行为) | ① **共性问题 15.1 双向核查**:def.cpp AddConfig("ascend950") 存在而文档标 ×(真实失配)② **共性问题 15.4(扫描 FAIL)**:4 个代码约束资料未声明 | | op_host/index_check_infershape.cpp<br>op_graph/index_check_graph_infer.cpp | 块注释 /* */ → //(各 1 行) | style 2.3(检视发现) | ## 明确不做的项及理由 | 项 | 理由 | |---|---| | 950 binary json(#10445 曾引入,#11349 已回退) | 手写 json 的 bin_filename 与 950 构建产物(哈希命名)不符且覆盖自动生成机制;无源 json 时构建自动生成正确配置(已验证) | | 运行时 format 校验(CheckFormat) | 共性问题 10 格式为 **REVIEW** 项:约束由 OpDef 注册 + binary json 元数据在框架层强制(同仓 80+ 算子同惯例),书面确认即可,不改码 | | tiling 逐张量 dtype 一致性/format 校验 | DType 驱动类,兼容性交付算子按整改指引不整改;op_api 层已有同校验 | | dim<0/溢出/bound<=0 防御校验、既有日志语法润色、scatter_elements UT | 无 finding 支撑(防御性自加)或不属本算子范围,按最小范围原则撤除 | | 共性问题 15.1 A2/A3 部分 | **误报豁免**:扫描规则对旧芯片仅查 canndev ini,本算子 A2/A3 支持声明于 def.cpp AddConfig(新轨注册),证据链见 Issue #5888 | | 共性问题 15.3 | **误报豁免**:L0-only 算子无公开 aclnn API,仓内 11 个同类 L0 算子同惯例无 aclnn 文档 | ## 验证 | 项 | 结果 | |---|---| | build.sh --ops=index_check --soc=ascend910_93 --pkg | ✅ 通过 | | build.sh --ops=index_check --soc=ascend950 --pkg(无源 json) | ✅ 通过,kernel/config/ascend950/index_check.json 自动生成、binInfo 指向真实产物 | | pre-commit(clang-format/codespell/OAT) | ✅ 全绿 | | 原始修复的精度回归(TTK 207 条 × 5+ 轮、Release 真机 VEC_ERROR) | 见 #10445 / Issue #5888(本次保留项代码未变) | ## 关联 - 原 PR:#10445 回退 PR:#11349 问题追踪:Issue #5888 See merge request: cann/ops-nn!11381 | 20 天前 | |
fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !11381 merge reland/indexcheck-fixes-v2 into master fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 描述 按**最小必要范围**重新提交 PR #10445 的缺陷修复(8 文件,+137/-90)。每处修改均可追溯至有编号的检视(ascendc-code-review)或准入扫描(ops-admission-scan)发现;**不含** config/ascend950/index_check_binary.json,并按导师对兼容性交付算子的整改指引撤除了无 finding 支撑的改动。 ## 逐文件改动与目的 | 文件 | 改动 | 解决的问题(发现编号/依据) | |---|---|---| | op_kernel/index_check.h | ① 4 处 ascendc_assert→Trap() ② bounds 经 DataCopyPad 搬入 UB 后 LocalTensor 读取(新增 boundsTableBuf_,构造顺序 InitParams→InitBuffers→InitBounds)③ TensorList 地址表改裸指针模式 ④ int64 实例 5 个向量队列 if constexpr 条件化(不分配) | ① **编码红线 P1(检视 FAIL 80%)**:ascendc_assert 在 NDEBUG 下展开为空,Release 编译越界检测退化为 no-op,算子唯一功能失效 ② **红线 API-1(FAIL 80%)**:生产代码 3 处 GlobalTensor::GetValue(API 黑名单,GM 逐元素访问性能极差)③ 同 API-1 ④ **红线 TIL-3(FAIL 80%)**:int64 实例向量队列分配后零读写,占 UB 预算 71.4%,maxBatchSize 被压至 1/3.5 | | op_kernel/index_check.cpp | TILING_KEY_IS(0)/(1) 宏分发简化为模板直分 | TIL-3 配套:int64 恒走标量路径后宏分支不可达(死分支) | | op_host/index_check_tiling.cpp | ① TilingIndexCheck/TilingPrepareForIndexCheck 入口 context 判空前移 ② bounds 一维/长度校验(GetDimNum()!=1 \|\| GetDim(0)!=tensorId_ 拒绝)③ int64 预算 28B→8B/元素(indicesDtype_)④ SetBlockDim 返回值检查 ⑤ ubSize 无符号下溢修复(原 ubSizePlatform - SCALE_SPACE 在平台 UB<20480 时下溢为极大值,使下限检查失效)⑥ Arch35 硬编码日志去除 ⑦ 未用 include 清理 | ① **红线 RL-6/GEN-1.1(FAIL 70%)**:OP_LOGD(context->GetNodeName()) 在判空前解引用 ② **共性问题 11 维度+15.4(扫描 FAIL)**:spec 声明 rank_range:[1,1] 代码未实现,2-D bounds 元素数巧合时边界语义错位 ③ TIL-3 配套(maxBatchSize 8336→29184)④ **红线 TOPK-1(FAIL 85%)**:SetBlockDim 失败后 tiling 仍返 SUCCESS,kernel 按错误核数启动→部分索引静默漏检 ⑤ 基线真实缺陷 ⑥ SEC-8.4 ⑦ GEN-2.3 | | op_host/index_check_tiling.h | 魔鬼数字 8 → MAX_TENSOR_NUM 常量 | GEN-4.2(检视发现) | | op_api/index_check.cpp | ① 入口判空补 executor;IsAiCoreSupport 逐张量判空 ② bounds->Size() 传 %zu 加 static_cast<size_t>(2 处)③ 超限日志补上限值 ④ MAX_DIM_LEN→MAX_TENSOR_NUM(名实一致)、常量小驼峰 ⑤ 删 2 个未用 include | ① GEN-1.1(SUSP 70%):空指针 UB ② SEC-1.3:C 标准 varargs UB ③ SEC-8.4:排障日志缺关键值 ④ GEN-4.3/style1.4 ⑤ GEN-2.3 | | README.md | ① 950PR/950DT 行 ×→√ ② 补 4 条约束声明(rank≤8、列表非空、空张量跳过、空列表双路径行为) | ① **共性问题 15.1 双向核查**:def.cpp AddConfig("ascend950") 存在而文档标 ×(真实失配)② **共性问题 15.4(扫描 FAIL)**:4 个代码约束资料未声明 | | op_host/index_check_infershape.cpp<br>op_graph/index_check_graph_infer.cpp | 块注释 /* */ → //(各 1 行) | style 2.3(检视发现) | ## 明确不做的项及理由 | 项 | 理由 | |---|---| | 950 binary json(#10445 曾引入,#11349 已回退) | 手写 json 的 bin_filename 与 950 构建产物(哈希命名)不符且覆盖自动生成机制;无源 json 时构建自动生成正确配置(已验证) | | 运行时 format 校验(CheckFormat) | 共性问题 10 格式为 **REVIEW** 项:约束由 OpDef 注册 + binary json 元数据在框架层强制(同仓 80+ 算子同惯例),书面确认即可,不改码 | | tiling 逐张量 dtype 一致性/format 校验 | DType 驱动类,兼容性交付算子按整改指引不整改;op_api 层已有同校验 | | dim<0/溢出/bound<=0 防御校验、既有日志语法润色、scatter_elements UT | 无 finding 支撑(防御性自加)或不属本算子范围,按最小范围原则撤除 | | 共性问题 15.1 A2/A3 部分 | **误报豁免**:扫描规则对旧芯片仅查 canndev ini,本算子 A2/A3 支持声明于 def.cpp AddConfig(新轨注册),证据链见 Issue #5888 | | 共性问题 15.3 | **误报豁免**:L0-only 算子无公开 aclnn API,仓内 11 个同类 L0 算子同惯例无 aclnn 文档 | ## 验证 | 项 | 结果 | |---|---| | build.sh --ops=index_check --soc=ascend910_93 --pkg | ✅ 通过 | | build.sh --ops=index_check --soc=ascend950 --pkg(无源 json) | ✅ 通过,kernel/config/ascend950/index_check.json 自动生成、binInfo 指向真实产物 | | pre-commit(clang-format/codespell/OAT) | ✅ 全绿 | | 原始修复的精度回归(TTK 207 条 × 5+ 轮、Release 真机 VEC_ERROR) | 见 #10445 / Issue #5888(本次保留项代码未变) | ## 关联 - 原 PR:#10445 回退 PR:#11349 问题追踪:Issue #5888 See merge request: cann/ops-nn!11381 | 20 天前 | |
fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !11381 merge reland/indexcheck-fixes-v2 into master fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 描述 按**最小必要范围**重新提交 PR #10445 的缺陷修复(8 文件,+137/-90)。每处修改均可追溯至有编号的检视(ascendc-code-review)或准入扫描(ops-admission-scan)发现;**不含** config/ascend950/index_check_binary.json,并按导师对兼容性交付算子的整改指引撤除了无 finding 支撑的改动。 ## 逐文件改动与目的 | 文件 | 改动 | 解决的问题(发现编号/依据) | |---|---|---| | op_kernel/index_check.h | ① 4 处 ascendc_assert→Trap() ② bounds 经 DataCopyPad 搬入 UB 后 LocalTensor 读取(新增 boundsTableBuf_,构造顺序 InitParams→InitBuffers→InitBounds)③ TensorList 地址表改裸指针模式 ④ int64 实例 5 个向量队列 if constexpr 条件化(不分配) | ① **编码红线 P1(检视 FAIL 80%)**:ascendc_assert 在 NDEBUG 下展开为空,Release 编译越界检测退化为 no-op,算子唯一功能失效 ② **红线 API-1(FAIL 80%)**:生产代码 3 处 GlobalTensor::GetValue(API 黑名单,GM 逐元素访问性能极差)③ 同 API-1 ④ **红线 TIL-3(FAIL 80%)**:int64 实例向量队列分配后零读写,占 UB 预算 71.4%,maxBatchSize 被压至 1/3.5 | | op_kernel/index_check.cpp | TILING_KEY_IS(0)/(1) 宏分发简化为模板直分 | TIL-3 配套:int64 恒走标量路径后宏分支不可达(死分支) | | op_host/index_check_tiling.cpp | ① TilingIndexCheck/TilingPrepareForIndexCheck 入口 context 判空前移 ② bounds 一维/长度校验(GetDimNum()!=1 \|\| GetDim(0)!=tensorId_ 拒绝)③ int64 预算 28B→8B/元素(indicesDtype_)④ SetBlockDim 返回值检查 ⑤ ubSize 无符号下溢修复(原 ubSizePlatform - SCALE_SPACE 在平台 UB<20480 时下溢为极大值,使下限检查失效)⑥ Arch35 硬编码日志去除 ⑦ 未用 include 清理 | ① **红线 RL-6/GEN-1.1(FAIL 70%)**:OP_LOGD(context->GetNodeName()) 在判空前解引用 ② **共性问题 11 维度+15.4(扫描 FAIL)**:spec 声明 rank_range:[1,1] 代码未实现,2-D bounds 元素数巧合时边界语义错位 ③ TIL-3 配套(maxBatchSize 8336→29184)④ **红线 TOPK-1(FAIL 85%)**:SetBlockDim 失败后 tiling 仍返 SUCCESS,kernel 按错误核数启动→部分索引静默漏检 ⑤ 基线真实缺陷 ⑥ SEC-8.4 ⑦ GEN-2.3 | | op_host/index_check_tiling.h | 魔鬼数字 8 → MAX_TENSOR_NUM 常量 | GEN-4.2(检视发现) | | op_api/index_check.cpp | ① 入口判空补 executor;IsAiCoreSupport 逐张量判空 ② bounds->Size() 传 %zu 加 static_cast<size_t>(2 处)③ 超限日志补上限值 ④ MAX_DIM_LEN→MAX_TENSOR_NUM(名实一致)、常量小驼峰 ⑤ 删 2 个未用 include | ① GEN-1.1(SUSP 70%):空指针 UB ② SEC-1.3:C 标准 varargs UB ③ SEC-8.4:排障日志缺关键值 ④ GEN-4.3/style1.4 ⑤ GEN-2.3 | | README.md | ① 950PR/950DT 行 ×→√ ② 补 4 条约束声明(rank≤8、列表非空、空张量跳过、空列表双路径行为) | ① **共性问题 15.1 双向核查**:def.cpp AddConfig("ascend950") 存在而文档标 ×(真实失配)② **共性问题 15.4(扫描 FAIL)**:4 个代码约束资料未声明 | | op_host/index_check_infershape.cpp<br>op_graph/index_check_graph_infer.cpp | 块注释 /* */ → //(各 1 行) | style 2.3(检视发现) | ## 明确不做的项及理由 | 项 | 理由 | |---|---| | 950 binary json(#10445 曾引入,#11349 已回退) | 手写 json 的 bin_filename 与 950 构建产物(哈希命名)不符且覆盖自动生成机制;无源 json 时构建自动生成正确配置(已验证) | | 运行时 format 校验(CheckFormat) | 共性问题 10 格式为 **REVIEW** 项:约束由 OpDef 注册 + binary json 元数据在框架层强制(同仓 80+ 算子同惯例),书面确认即可,不改码 | | tiling 逐张量 dtype 一致性/format 校验 | DType 驱动类,兼容性交付算子按整改指引不整改;op_api 层已有同校验 | | dim<0/溢出/bound<=0 防御校验、既有日志语法润色、scatter_elements UT | 无 finding 支撑(防御性自加)或不属本算子范围,按最小范围原则撤除 | | 共性问题 15.1 A2/A3 部分 | **误报豁免**:扫描规则对旧芯片仅查 canndev ini,本算子 A2/A3 支持声明于 def.cpp AddConfig(新轨注册),证据链见 Issue #5888 | | 共性问题 15.3 | **误报豁免**:L0-only 算子无公开 aclnn API,仓内 11 个同类 L0 算子同惯例无 aclnn 文档 | ## 验证 | 项 | 结果 | |---|---| | build.sh --ops=index_check --soc=ascend910_93 --pkg | ✅ 通过 | | build.sh --ops=index_check --soc=ascend950 --pkg(无源 json) | ✅ 通过,kernel/config/ascend950/index_check.json 自动生成、binInfo 指向真实产物 | | pre-commit(clang-format/codespell/OAT) | ✅ 全绿 | | 原始修复的精度回归(TTK 207 条 × 5+ 轮、Release 真机 VEC_ERROR) | 见 #10445 / Issue #5888(本次保留项代码未变) | ## 关联 - 原 PR:#10445 回退 PR:#11349 问题追踪:Issue #5888 See merge request: cann/ops-nn!11381 | 20 天前 | |
fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !11381 merge reland/indexcheck-fixes-v2 into master fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 描述 按**最小必要范围**重新提交 PR #10445 的缺陷修复(8 文件,+137/-90)。每处修改均可追溯至有编号的检视(ascendc-code-review)或准入扫描(ops-admission-scan)发现;**不含** config/ascend950/index_check_binary.json,并按导师对兼容性交付算子的整改指引撤除了无 finding 支撑的改动。 ## 逐文件改动与目的 | 文件 | 改动 | 解决的问题(发现编号/依据) | |---|---|---| | op_kernel/index_check.h | ① 4 处 ascendc_assert→Trap() ② bounds 经 DataCopyPad 搬入 UB 后 LocalTensor 读取(新增 boundsTableBuf_,构造顺序 InitParams→InitBuffers→InitBounds)③ TensorList 地址表改裸指针模式 ④ int64 实例 5 个向量队列 if constexpr 条件化(不分配) | ① **编码红线 P1(检视 FAIL 80%)**:ascendc_assert 在 NDEBUG 下展开为空,Release 编译越界检测退化为 no-op,算子唯一功能失效 ② **红线 API-1(FAIL 80%)**:生产代码 3 处 GlobalTensor::GetValue(API 黑名单,GM 逐元素访问性能极差)③ 同 API-1 ④ **红线 TIL-3(FAIL 80%)**:int64 实例向量队列分配后零读写,占 UB 预算 71.4%,maxBatchSize 被压至 1/3.5 | | op_kernel/index_check.cpp | TILING_KEY_IS(0)/(1) 宏分发简化为模板直分 | TIL-3 配套:int64 恒走标量路径后宏分支不可达(死分支) | | op_host/index_check_tiling.cpp | ① TilingIndexCheck/TilingPrepareForIndexCheck 入口 context 判空前移 ② bounds 一维/长度校验(GetDimNum()!=1 \|\| GetDim(0)!=tensorId_ 拒绝)③ int64 预算 28B→8B/元素(indicesDtype_)④ SetBlockDim 返回值检查 ⑤ ubSize 无符号下溢修复(原 ubSizePlatform - SCALE_SPACE 在平台 UB<20480 时下溢为极大值,使下限检查失效)⑥ Arch35 硬编码日志去除 ⑦ 未用 include 清理 | ① **红线 RL-6/GEN-1.1(FAIL 70%)**:OP_LOGD(context->GetNodeName()) 在判空前解引用 ② **共性问题 11 维度+15.4(扫描 FAIL)**:spec 声明 rank_range:[1,1] 代码未实现,2-D bounds 元素数巧合时边界语义错位 ③ TIL-3 配套(maxBatchSize 8336→29184)④ **红线 TOPK-1(FAIL 85%)**:SetBlockDim 失败后 tiling 仍返 SUCCESS,kernel 按错误核数启动→部分索引静默漏检 ⑤ 基线真实缺陷 ⑥ SEC-8.4 ⑦ GEN-2.3 | | op_host/index_check_tiling.h | 魔鬼数字 8 → MAX_TENSOR_NUM 常量 | GEN-4.2(检视发现) | | op_api/index_check.cpp | ① 入口判空补 executor;IsAiCoreSupport 逐张量判空 ② bounds->Size() 传 %zu 加 static_cast<size_t>(2 处)③ 超限日志补上限值 ④ MAX_DIM_LEN→MAX_TENSOR_NUM(名实一致)、常量小驼峰 ⑤ 删 2 个未用 include | ① GEN-1.1(SUSP 70%):空指针 UB ② SEC-1.3:C 标准 varargs UB ③ SEC-8.4:排障日志缺关键值 ④ GEN-4.3/style1.4 ⑤ GEN-2.3 | | README.md | ① 950PR/950DT 行 ×→√ ② 补 4 条约束声明(rank≤8、列表非空、空张量跳过、空列表双路径行为) | ① **共性问题 15.1 双向核查**:def.cpp AddConfig("ascend950") 存在而文档标 ×(真实失配)② **共性问题 15.4(扫描 FAIL)**:4 个代码约束资料未声明 | | op_host/index_check_infershape.cpp<br>op_graph/index_check_graph_infer.cpp | 块注释 /* */ → //(各 1 行) | style 2.3(检视发现) | ## 明确不做的项及理由 | 项 | 理由 | |---|---| | 950 binary json(#10445 曾引入,#11349 已回退) | 手写 json 的 bin_filename 与 950 构建产物(哈希命名)不符且覆盖自动生成机制;无源 json 时构建自动生成正确配置(已验证) | | 运行时 format 校验(CheckFormat) | 共性问题 10 格式为 **REVIEW** 项:约束由 OpDef 注册 + binary json 元数据在框架层强制(同仓 80+ 算子同惯例),书面确认即可,不改码 | | tiling 逐张量 dtype 一致性/format 校验 | DType 驱动类,兼容性交付算子按整改指引不整改;op_api 层已有同校验 | | dim<0/溢出/bound<=0 防御校验、既有日志语法润色、scatter_elements UT | 无 finding 支撑(防御性自加)或不属本算子范围,按最小范围原则撤除 | | 共性问题 15.1 A2/A3 部分 | **误报豁免**:扫描规则对旧芯片仅查 canndev ini,本算子 A2/A3 支持声明于 def.cpp AddConfig(新轨注册),证据链见 Issue #5888 | | 共性问题 15.3 | **误报豁免**:L0-only 算子无公开 aclnn API,仓内 11 个同类 L0 算子同惯例无 aclnn 文档 | ## 验证 | 项 | 结果 | |---|---| | build.sh --ops=index_check --soc=ascend910_93 --pkg | ✅ 通过 | | build.sh --ops=index_check --soc=ascend950 --pkg(无源 json) | ✅ 通过,kernel/config/ascend950/index_check.json 自动生成、binInfo 指向真实产物 | | pre-commit(clang-format/codespell/OAT) | ✅ 全绿 | | 原始修复的精度回归(TTK 207 条 × 5+ 轮、Release 真机 VEC_ERROR) | 见 #10445 / Issue #5888(本次保留项代码未变) | ## 关联 - 原 PR:#10445 回退 PR:#11349 问题追踪:Issue #5888 See merge request: cann/ops-nn!11381 | 20 天前 | |
修改index、index_put_v2算子aclnn接口L2调用点,增加IndexCheck越界检查 Co-authored-by: BoyangZhang<zhangboyang15@h-partners.com> # message auto-generated for no-merge-commit merge: !4957 merge index_check_l2_callpoint into master 修改index、index_put_v2算子aclnn接口L2调用点,增加IndexCheck越界检查 Created-by: BoyangZhang Commit-by: BoyangZhang Merged-by: cann-robot Description: ## 描述 修改index、index_put_v2算子aclnn接口L2调用点,增加IndexCheck越界检查 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/2750 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!4957 | 5 个月前 | |
fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Co-authored-by: Bright0313<liwenbo84@huawei.com> # message auto-generated for no-merge-commit merge: !11381 merge reland/indexcheck-fixes-v2 into master fix(index_check): re-land red-line and admission fixes with minimal scope (without 950 binary json) Created-by: Bright0313 Commit-by: Bright0313 Merged-by: cann-robot Description: ## 描述 按**最小必要范围**重新提交 PR #10445 的缺陷修复(8 文件,+137/-90)。每处修改均可追溯至有编号的检视(ascendc-code-review)或准入扫描(ops-admission-scan)发现;**不含** config/ascend950/index_check_binary.json,并按导师对兼容性交付算子的整改指引撤除了无 finding 支撑的改动。 ## 逐文件改动与目的 | 文件 | 改动 | 解决的问题(发现编号/依据) | |---|---|---| | op_kernel/index_check.h | ① 4 处 ascendc_assert→Trap() ② bounds 经 DataCopyPad 搬入 UB 后 LocalTensor 读取(新增 boundsTableBuf_,构造顺序 InitParams→InitBuffers→InitBounds)③ TensorList 地址表改裸指针模式 ④ int64 实例 5 个向量队列 if constexpr 条件化(不分配) | ① **编码红线 P1(检视 FAIL 80%)**:ascendc_assert 在 NDEBUG 下展开为空,Release 编译越界检测退化为 no-op,算子唯一功能失效 ② **红线 API-1(FAIL 80%)**:生产代码 3 处 GlobalTensor::GetValue(API 黑名单,GM 逐元素访问性能极差)③ 同 API-1 ④ **红线 TIL-3(FAIL 80%)**:int64 实例向量队列分配后零读写,占 UB 预算 71.4%,maxBatchSize 被压至 1/3.5 | | op_kernel/index_check.cpp | TILING_KEY_IS(0)/(1) 宏分发简化为模板直分 | TIL-3 配套:int64 恒走标量路径后宏分支不可达(死分支) | | op_host/index_check_tiling.cpp | ① TilingIndexCheck/TilingPrepareForIndexCheck 入口 context 判空前移 ② bounds 一维/长度校验(GetDimNum()!=1 \|\| GetDim(0)!=tensorId_ 拒绝)③ int64 预算 28B→8B/元素(indicesDtype_)④ SetBlockDim 返回值检查 ⑤ ubSize 无符号下溢修复(原 ubSizePlatform - SCALE_SPACE 在平台 UB<20480 时下溢为极大值,使下限检查失效)⑥ Arch35 硬编码日志去除 ⑦ 未用 include 清理 | ① **红线 RL-6/GEN-1.1(FAIL 70%)**:OP_LOGD(context->GetNodeName()) 在判空前解引用 ② **共性问题 11 维度+15.4(扫描 FAIL)**:spec 声明 rank_range:[1,1] 代码未实现,2-D bounds 元素数巧合时边界语义错位 ③ TIL-3 配套(maxBatchSize 8336→29184)④ **红线 TOPK-1(FAIL 85%)**:SetBlockDim 失败后 tiling 仍返 SUCCESS,kernel 按错误核数启动→部分索引静默漏检 ⑤ 基线真实缺陷 ⑥ SEC-8.4 ⑦ GEN-2.3 | | op_host/index_check_tiling.h | 魔鬼数字 8 → MAX_TENSOR_NUM 常量 | GEN-4.2(检视发现) | | op_api/index_check.cpp | ① 入口判空补 executor;IsAiCoreSupport 逐张量判空 ② bounds->Size() 传 %zu 加 static_cast<size_t>(2 处)③ 超限日志补上限值 ④ MAX_DIM_LEN→MAX_TENSOR_NUM(名实一致)、常量小驼峰 ⑤ 删 2 个未用 include | ① GEN-1.1(SUSP 70%):空指针 UB ② SEC-1.3:C 标准 varargs UB ③ SEC-8.4:排障日志缺关键值 ④ GEN-4.3/style1.4 ⑤ GEN-2.3 | | README.md | ① 950PR/950DT 行 ×→√ ② 补 4 条约束声明(rank≤8、列表非空、空张量跳过、空列表双路径行为) | ① **共性问题 15.1 双向核查**:def.cpp AddConfig("ascend950") 存在而文档标 ×(真实失配)② **共性问题 15.4(扫描 FAIL)**:4 个代码约束资料未声明 | | op_host/index_check_infershape.cpp<br>op_graph/index_check_graph_infer.cpp | 块注释 /* */ → //(各 1 行) | style 2.3(检视发现) | ## 明确不做的项及理由 | 项 | 理由 | |---|---| | 950 binary json(#10445 曾引入,#11349 已回退) | 手写 json 的 bin_filename 与 950 构建产物(哈希命名)不符且覆盖自动生成机制;无源 json 时构建自动生成正确配置(已验证) | | 运行时 format 校验(CheckFormat) | 共性问题 10 格式为 **REVIEW** 项:约束由 OpDef 注册 + binary json 元数据在框架层强制(同仓 80+ 算子同惯例),书面确认即可,不改码 | | tiling 逐张量 dtype 一致性/format 校验 | DType 驱动类,兼容性交付算子按整改指引不整改;op_api 层已有同校验 | | dim<0/溢出/bound<=0 防御校验、既有日志语法润色、scatter_elements UT | 无 finding 支撑(防御性自加)或不属本算子范围,按最小范围原则撤除 | | 共性问题 15.1 A2/A3 部分 | **误报豁免**:扫描规则对旧芯片仅查 canndev ini,本算子 A2/A3 支持声明于 def.cpp AddConfig(新轨注册),证据链见 Issue #5888 | | 共性问题 15.3 | **误报豁免**:L0-only 算子无公开 aclnn API,仓内 11 个同类 L0 算子同惯例无 aclnn 文档 | ## 验证 | 项 | 结果 | |---|---| | build.sh --ops=index_check --soc=ascend910_93 --pkg | ✅ 通过 | | build.sh --ops=index_check --soc=ascend950 --pkg(无源 json) | ✅ 通过,kernel/config/ascend950/index_check.json 自动生成、binInfo 指向真实产物 | | pre-commit(clang-format/codespell/OAT) | ✅ 全绿 | | 原始修复的精度回归(TTK 207 条 × 5+ 轮、Release 真机 VEC_ERROR) | 见 #10445 / Issue #5888(本次保留项代码未变) | ## 关联 - 原 PR:#10445 回退 PR:#11349 问题追踪:Issue #5888 See merge request: cann/ops-nn!11381 | 20 天前 |
IndexCheck
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
- 算子功能:检查索引是否越界。当索引超出边界值范围时,算子会触发硬件异常并终止程序。
- 应用场景:用于索引类aclnn l2接口,在执行索引操作前进行索引合法性检查。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| bounds | 输入 | 各维度的边界值(即各维度的size),长度需与indices列表中tensor个数一致。 | INT64 | ND |
| indices | 输入 | 索引张量列表,列表中每个张量按顺序对应bounds中的一个边界值。 | INT32、INT64 | ND |
约束说明
- bounds必须为1维Tensor,长度范围为1~8。
- bounds的长度需要等于indices列表中tensor的个数。
- indices列表不能为空,列表中Tensor的个数不能超过8。
- indices列表中的每个Tensor支持0~8维、空Tensor;不支持9维及以上Tensor。
- 空indices Tensor不执行索引检查;空indices列表为非法输入。
- indices中的索引值支持负数。
- 若索引越界,算子会触发硬件异常并终止程序。