| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[CANNBOT]atanh修改example和population_count适配Ascend950 Ascendc实现 Co-authored-by: gcw_YBIAEfqJ<wangweidong15@huawei.com> # message auto-generated for no-merge-commit merge: !3070 merge inv-ascend950-int32 into master [CANNBOT]atanh修改example和population_count适配Ascend950 Ascendc实现 Created-by: gcw_YBIAEfqJ Commit-by: gcw_YBIAEfqJ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ### population_count (popcount) 公式与实现 数学定义 $$ \operatorname{popcount}(x) = \sum_{k=0}^{\infty}\big((x \gg k) \mathbin{\&} 1\big) $$ ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1673 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!3070 | 4 个月前 | |
迁移开源TF插件--math Co-authored-by: yaochen<yaochen15@huawei.com> # message auto-generated for no-merge-commit merge: !4308 merge transfer-math into master 迁移开源TF插件--math Created-by: nextyale Commit-by: yaochen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:迁移TF插件 See merge request: cann/ops-math!4308 | 2 个月前 | |
[population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !6195 merge population_count_quality_hardening into master [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: # [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) ## 一、变更概述 针对 population_count(PopulationCount,ops-math/math/population_count)的转测准入白盒扫描(总体 FAIL,3 项 FAIL:E3 TBE ini 残留、15.4 缺约束、15.5 描述不准确,其中 15.4/15.5 经 LLM 复核为扫描器误报;X2 格式项人工 WARN)与代码检视(PASS 121/FAIL 2/SUSPICIOUS 1:TOPK-2、LOG-1、GEN-4.2;风格违规 STYLE-1.4;设计一致性 S1/S2/S5/D8 ❌)的发现,实施质量加固整改: - **Host 侧校验加固**:修复 InferShape 禁止模式(GetInputTensor → GetInputDesc,TOPK-2),infershape 白名单收紧为 {INT16,UINT16},verifier 白名单同口径收紧(X1/TOPK-2 四层口径一致),tiling 增加 ND 格式显式校验并补充 NCHW 拒绝 UT(X2/P4); - **日志与可维护性**:删除语义冗余裸 OP_LOGE 改用预定义错误宏(LOG-1),SWAR 位掩码魔数改为具名常量(GEN-4.2),snake_case 变量/常量命名整改(STYLE-1.4); - **资料收敛**:DESIGN.md/REQUIREMENTS.md v1.1 以代码为准同步(Kernel 入口去 _apt、GEIR-only 标注、§4.1 切分公式、TilingKey 2 变体、模板参数、ubBlockSize、D8 数字中文空格); - **用例与交付件**:新建 l2_exception.csv 4 例补齐 dtype/format 异常缺口,归档覆盖度报告与双"一致"验证证据。 ## 二、分类修改清单 ### 代码(ops-math/math/population_count/) | 条目 | 修改内容 | 文件 | |------|---------|------| | TOPK-2 | InferShape 改 GetInputDesc(0)->GetDataType() 获取 dtype(与 tiling 口径一致),白名单收紧为 {DT_INT16, DT_UINT16} | op_host/population_count_infershape.cpp:41,44 | | X1 / TOPK-2 | verifier 白名单由 8 种整数收紧为 {DT_INT16, DT_UINT16},与 def/infershape/tiling 四层口径一致 | op_graph/population_count_graph_infer.cpp:36 | | LOG-1 | 删除两处语义冗余裸 OP_LOGE,仅保留预定义宏 OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON(EZ0020 结构化上报) | op_host/population_count_infershape.cpp:46、op_graph/population_count_graph_infer.cpp:43 | | GEN-4.2 | SWAR 位掩码魔数改具名常量 SWAR_MASK_EVEN_BITS/LOW_TWO_BITS/LOW_NIBBLE/LOW_BYTE,替换 9 处引用(语义等价) | op_kernel/arch35/population_count.h:56-59、:153-180 | | STYLE-1.4 | 局部变量改小驼峰(inputShape/inputTensor/inputDtype/outputShape),静态 const 常量改全大写下划线(G_VEC_1_SHAPE) | op_host/population_count_infershape.cpp:37,41,44,53、op_host/arch35/population_count_tiling_arch35.cpp:38,43 | | X2 / P4 | tiling 新增 ND 存储格式显式校验(非 FORMAT_ND → OP_LOGE + GRAPH_FAILED),"仅 ND"升级为运行时契约 | op_host/arch35/population_count_tiling_arch35.cpp:89-93 | ### 资料(operator-artifacts/PopulationCount/) | 条目 | 修改内容 | 文件 | |------|---------|------| | S1 | DESIGN v1.1:Kernel 入口去 _apt 后缀(population_count.cpp / opFile.value="population_count");标注 ACLNN 通路未启用(ACLNNTYPE=aclnn_exclude、无 op_api/),用户视图 ACLNN 直接调用 ❌ | DESIGN.md:81、DESIGN.md:212-218 | | S2 | DESIGN v1.1:§4.1 并行策略改写为与 §2.3.2 一致的 32 元素对齐简单均分公式(删除 4KB/512 对齐旧公式);TilingKey 收敛为 BUFFER_MODE 单轴 2 变体 | DESIGN.md:623-633 | | S5 | DESIGN v1.1:Kernel 模板参数去 dtype 轴(仅 BUFFER_MODE,dtype 经构建宏注入);ubBlockSize 修正为 32 bytes | DESIGN.md §3.5/§3.10 | | D8 | DESIGN/REQUIREMENTS 数字与中文之间空格违规清理(约 89 + 17 处,1-bit 等英文技术名词保留) | DESIGN.md、REQUIREMENTS.md | | S1(需求侧) | REQUIREMENTS v1.1:调用方式表 ACLNN [ ],§5 ACLNN API 接口定义标注"暂未启用" | REQUIREMENTS.md:35,69-71 | | 覆盖度/一致性归档 | coverage_report.md(UINT8 伪缺口复核结论)、coverage_matrix.json、report.md、verification_result.csv(Constraint_Consistency=一致、Golden_Consistency=一致) | reports/、verification/ | ### 用例 | 条目 | 修改内容 | 文件 | |------|---------|------| | X2 配套 UT | 新增 tiling_invalid_format_nchw_rejected(NCHW × DT_INT16 4D 期望 GRAPH_FAILED) | tests/ut/op_host/arch35/test_population_count_tiling_arch35.cpp:142-148 | | 异常用例补全 | 新建 population_count_l2_exception.csv(4 条:int32/int8 dtype 异常、NCHW format×int16/uint16,remark 带 expected_error= 标记) | operator-artifacts/PopulationCount/测试用例/population_count_l2_exception.csv(新建) | ## 三、逐 commit 摘要 | # | Commit | 仓库 | 时间(UTC) | 类型 | 摘要 | |---|--------|------|------------|------|------| | 1 | d3da50831 | ops-math | 2026-09-24 08:09 | fix | TOPK-2:InferShape 改 GetInputDesc 取 dtype、白名单收紧为 INT16/UINT16(与 def/tiling 一致) | | 2 | a82cbae2d | ops-math | 2026-09-24 08:09 | fix | LOG-1:删除 infershape/graph_infer 两处语义冗余裸 OP_LOGE,保留预定义错误宏 | | 3 | 74e92f0df | ops-math | 2026-09-24 08:10 | refactor | GEN-4.2:SWAR 四个位掩码魔数改为具名常量并替换 9 处引用 | | 4 | ec51db8a9 | ops-math | 2026-09-24 08:10 | style | STYLE-1.4:局部变量改小驼峰、静态常量改全大写下划线(G_VEC_1_SHAPE) | | 5 | 21b903f0e | ops-math | 2026-09-24 10:38 | fix | X1/TOPK-2:verifier 白名单收紧为 INT16/UINT16,四层引流口径一致 | | 6 | c9595fe57 | ops-math | 2026-09-24 10:38 | fix | X2/P4:tiling 增加 ND 格式显式校验(非 FORMAT_ND 拒绝)+ NCHW 拒绝 UT | | 7 | 625b165 | operator-artifacts | 2026-09-24 09:10 | artifacts | 交付件同步(本算子部分):DESIGN/REQUIREMENTS v1.1(去 _apt、GEIR-only、§4.1 公式、TilingKey 2 变体、ubBlockSize、D8 空格清理)、新建 l2_exception.csv | | 8 | 8a47e70 | operator-artifacts | 2026-09-24 11:18 | artifacts | 交付件同步(本算子部分):reports/ 覆盖度归档(UINT8 伪缺口复核)、verification_result.csv 双"一致" | ## 四、测试与验证 - **Host UT:20/20 全通过**(infershape 7 例 + tiling 13 例;tiling 含本轮新增 tiling_invalid_format_nchw_rejected,以及 bfloat16/bool 错 dtype 拒绝负例、空 tensor/标量/阈值边界/多核等路径)。kernel 侧另有模拟 UT 3 例(all_zeros/empty_tensor/double_buffer_zeros)。 - **用例覆盖度**:kernel 归档 80.7 分(PASS,≥80%)。缺口复核:UINT8 枚举式缺口为伪缺口(UINT8 为固定输出 dtype,无对应输入通路);"不支持 dtype 异常用例缺失"与"format 异常×INT16/UINT16 缺失"已由本轮 l2_exception.csv 4 例 + tiling 显式校验覆盖(该 CSV 晚于 80.7 分评估时点,未计入分数)。 - **交付件一致性**:verification_result.csv Constraint_Consistency=一致、Golden_Consistency=一致(2026-09-24 复核)。 - **归档补测参照**:GEIR 14/15(唯一失败为 invalid 负向用例,EZ0020 dtype 预期拒绝)、tf 12/12。 - **静态复核**:全部整改均不触碰 SWAR 计算链语义(掩码具名、日志宏替换为等语义变更),计算正确性不受影响;整改条目与报告原文行号、commit 变更逐条对应(见 population_count_ISSUE.md)。 ## 五、未完成事项与限制 ### 三禁区声明(本次提交不涉及) 1. **ACLNN 通路(S1 残留能力决策)**:本算子 V1 维持 GEIR-only(ACLNNTYPE=aclnn_exclude,无 op_api/),DESIGN/REQUIREMENTS 已标注"暂未启用";是否在后续版本补建 ACLNN 接口属架构决策,本 PR 未新增 op_api 实现。 2. **canndev 仓(E3)**:950 ini [PopulationCount] section 上游已删除,架构师已定 canndev 不改,本 PR 对 canndev 零改动。 3. **产品支持声明**:README 支持表与代码双向一致,无历史误改需回退,本 PR 未做任何产品声明改动。 ### 环境与工具链限制 - **无 NPU/TTK**:GEIR 实机运行测试、TTK 异常证据测试均未执行(admission 标 UNAVAILABLE);本轮 ND 格式拒绝路径、白名单收紧后的 dtype 行为仅由 UT(模拟 TilingContext)覆盖,实机回归证据链待转测环境补齐。 - **日落 API 清单离线获取失败**:降级为本地静态扫描(无命中),待联网复核。 - **1.6/15.6 交付件一致性报告回写**:verification_result.csv 已双"一致"落库(8a47e70),但 admission transfer-report 15.6 未重跑 merge 回写仍渲染 N/A,需转测负责人重跑或人工判定闭合。 - **误报项不改**:15.4 缺约束(正则覆盖盲区,LLM 复核 4 项约束全部有实现)、15.5 f_dtype(解析器边界断言缺陷,README dtype 与 def 实际一致)人工复核为误报,未做改动。 ### 有意设计待背书 - **放弃原 §4.1 多核切分策略(每核 ≥4KB、512 元素对齐)**:v1.1 已将文档改写为与代码一致的 32 元素对齐简单均分(尾块由 kernel blockLength_ 钳位 + 溢出核跳过兜底),功能正确且有 UT 覆盖,但该设计取舍的修订人仅 CANNBot,缺人工评审背书记录;DESIGN §5.3 已保留"小 Shape 多核效率 中"风险提示。 ### 未修项索引 - 上述未完成事项共 5 条(禁区决策 1、有意设计背书 1、流程闭合 1、环境限制 2),逐条决策建议与修复条件详见 /home/s00947152/LongTail/guide/未修项明细/population_count_未修项明细.md。 See merge request: cann/ops-math!6195 | 4 天前 | |
[population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !6195 merge population_count_quality_hardening into master [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: # [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) ## 一、变更概述 针对 population_count(PopulationCount,ops-math/math/population_count)的转测准入白盒扫描(总体 FAIL,3 项 FAIL:E3 TBE ini 残留、15.4 缺约束、15.5 描述不准确,其中 15.4/15.5 经 LLM 复核为扫描器误报;X2 格式项人工 WARN)与代码检视(PASS 121/FAIL 2/SUSPICIOUS 1:TOPK-2、LOG-1、GEN-4.2;风格违规 STYLE-1.4;设计一致性 S1/S2/S5/D8 ❌)的发现,实施质量加固整改: - **Host 侧校验加固**:修复 InferShape 禁止模式(GetInputTensor → GetInputDesc,TOPK-2),infershape 白名单收紧为 {INT16,UINT16},verifier 白名单同口径收紧(X1/TOPK-2 四层口径一致),tiling 增加 ND 格式显式校验并补充 NCHW 拒绝 UT(X2/P4); - **日志与可维护性**:删除语义冗余裸 OP_LOGE 改用预定义错误宏(LOG-1),SWAR 位掩码魔数改为具名常量(GEN-4.2),snake_case 变量/常量命名整改(STYLE-1.4); - **资料收敛**:DESIGN.md/REQUIREMENTS.md v1.1 以代码为准同步(Kernel 入口去 _apt、GEIR-only 标注、§4.1 切分公式、TilingKey 2 变体、模板参数、ubBlockSize、D8 数字中文空格); - **用例与交付件**:新建 l2_exception.csv 4 例补齐 dtype/format 异常缺口,归档覆盖度报告与双"一致"验证证据。 ## 二、分类修改清单 ### 代码(ops-math/math/population_count/) | 条目 | 修改内容 | 文件 | |------|---------|------| | TOPK-2 | InferShape 改 GetInputDesc(0)->GetDataType() 获取 dtype(与 tiling 口径一致),白名单收紧为 {DT_INT16, DT_UINT16} | op_host/population_count_infershape.cpp:41,44 | | X1 / TOPK-2 | verifier 白名单由 8 种整数收紧为 {DT_INT16, DT_UINT16},与 def/infershape/tiling 四层口径一致 | op_graph/population_count_graph_infer.cpp:36 | | LOG-1 | 删除两处语义冗余裸 OP_LOGE,仅保留预定义宏 OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON(EZ0020 结构化上报) | op_host/population_count_infershape.cpp:46、op_graph/population_count_graph_infer.cpp:43 | | GEN-4.2 | SWAR 位掩码魔数改具名常量 SWAR_MASK_EVEN_BITS/LOW_TWO_BITS/LOW_NIBBLE/LOW_BYTE,替换 9 处引用(语义等价) | op_kernel/arch35/population_count.h:56-59、:153-180 | | STYLE-1.4 | 局部变量改小驼峰(inputShape/inputTensor/inputDtype/outputShape),静态 const 常量改全大写下划线(G_VEC_1_SHAPE) | op_host/population_count_infershape.cpp:37,41,44,53、op_host/arch35/population_count_tiling_arch35.cpp:38,43 | | X2 / P4 | tiling 新增 ND 存储格式显式校验(非 FORMAT_ND → OP_LOGE + GRAPH_FAILED),"仅 ND"升级为运行时契约 | op_host/arch35/population_count_tiling_arch35.cpp:89-93 | ### 资料(operator-artifacts/PopulationCount/) | 条目 | 修改内容 | 文件 | |------|---------|------| | S1 | DESIGN v1.1:Kernel 入口去 _apt 后缀(population_count.cpp / opFile.value="population_count");标注 ACLNN 通路未启用(ACLNNTYPE=aclnn_exclude、无 op_api/),用户视图 ACLNN 直接调用 ❌ | DESIGN.md:81、DESIGN.md:212-218 | | S2 | DESIGN v1.1:§4.1 并行策略改写为与 §2.3.2 一致的 32 元素对齐简单均分公式(删除 4KB/512 对齐旧公式);TilingKey 收敛为 BUFFER_MODE 单轴 2 变体 | DESIGN.md:623-633 | | S5 | DESIGN v1.1:Kernel 模板参数去 dtype 轴(仅 BUFFER_MODE,dtype 经构建宏注入);ubBlockSize 修正为 32 bytes | DESIGN.md §3.5/§3.10 | | D8 | DESIGN/REQUIREMENTS 数字与中文之间空格违规清理(约 89 + 17 处,1-bit 等英文技术名词保留) | DESIGN.md、REQUIREMENTS.md | | S1(需求侧) | REQUIREMENTS v1.1:调用方式表 ACLNN [ ],§5 ACLNN API 接口定义标注"暂未启用" | REQUIREMENTS.md:35,69-71 | | 覆盖度/一致性归档 | coverage_report.md(UINT8 伪缺口复核结论)、coverage_matrix.json、report.md、verification_result.csv(Constraint_Consistency=一致、Golden_Consistency=一致) | reports/、verification/ | ### 用例 | 条目 | 修改内容 | 文件 | |------|---------|------| | X2 配套 UT | 新增 tiling_invalid_format_nchw_rejected(NCHW × DT_INT16 4D 期望 GRAPH_FAILED) | tests/ut/op_host/arch35/test_population_count_tiling_arch35.cpp:142-148 | | 异常用例补全 | 新建 population_count_l2_exception.csv(4 条:int32/int8 dtype 异常、NCHW format×int16/uint16,remark 带 expected_error= 标记) | operator-artifacts/PopulationCount/测试用例/population_count_l2_exception.csv(新建) | ## 三、逐 commit 摘要 | # | Commit | 仓库 | 时间(UTC) | 类型 | 摘要 | |---|--------|------|------------|------|------| | 1 | d3da50831 | ops-math | 2026-09-24 08:09 | fix | TOPK-2:InferShape 改 GetInputDesc 取 dtype、白名单收紧为 INT16/UINT16(与 def/tiling 一致) | | 2 | a82cbae2d | ops-math | 2026-09-24 08:09 | fix | LOG-1:删除 infershape/graph_infer 两处语义冗余裸 OP_LOGE,保留预定义错误宏 | | 3 | 74e92f0df | ops-math | 2026-09-24 08:10 | refactor | GEN-4.2:SWAR 四个位掩码魔数改为具名常量并替换 9 处引用 | | 4 | ec51db8a9 | ops-math | 2026-09-24 08:10 | style | STYLE-1.4:局部变量改小驼峰、静态常量改全大写下划线(G_VEC_1_SHAPE) | | 5 | 21b903f0e | ops-math | 2026-09-24 10:38 | fix | X1/TOPK-2:verifier 白名单收紧为 INT16/UINT16,四层引流口径一致 | | 6 | c9595fe57 | ops-math | 2026-09-24 10:38 | fix | X2/P4:tiling 增加 ND 格式显式校验(非 FORMAT_ND 拒绝)+ NCHW 拒绝 UT | | 7 | 625b165 | operator-artifacts | 2026-09-24 09:10 | artifacts | 交付件同步(本算子部分):DESIGN/REQUIREMENTS v1.1(去 _apt、GEIR-only、§4.1 公式、TilingKey 2 变体、ubBlockSize、D8 空格清理)、新建 l2_exception.csv | | 8 | 8a47e70 | operator-artifacts | 2026-09-24 11:18 | artifacts | 交付件同步(本算子部分):reports/ 覆盖度归档(UINT8 伪缺口复核)、verification_result.csv 双"一致" | ## 四、测试与验证 - **Host UT:20/20 全通过**(infershape 7 例 + tiling 13 例;tiling 含本轮新增 tiling_invalid_format_nchw_rejected,以及 bfloat16/bool 错 dtype 拒绝负例、空 tensor/标量/阈值边界/多核等路径)。kernel 侧另有模拟 UT 3 例(all_zeros/empty_tensor/double_buffer_zeros)。 - **用例覆盖度**:kernel 归档 80.7 分(PASS,≥80%)。缺口复核:UINT8 枚举式缺口为伪缺口(UINT8 为固定输出 dtype,无对应输入通路);"不支持 dtype 异常用例缺失"与"format 异常×INT16/UINT16 缺失"已由本轮 l2_exception.csv 4 例 + tiling 显式校验覆盖(该 CSV 晚于 80.7 分评估时点,未计入分数)。 - **交付件一致性**:verification_result.csv Constraint_Consistency=一致、Golden_Consistency=一致(2026-09-24 复核)。 - **归档补测参照**:GEIR 14/15(唯一失败为 invalid 负向用例,EZ0020 dtype 预期拒绝)、tf 12/12。 - **静态复核**:全部整改均不触碰 SWAR 计算链语义(掩码具名、日志宏替换为等语义变更),计算正确性不受影响;整改条目与报告原文行号、commit 变更逐条对应(见 population_count_ISSUE.md)。 ## 五、未完成事项与限制 ### 三禁区声明(本次提交不涉及) 1. **ACLNN 通路(S1 残留能力决策)**:本算子 V1 维持 GEIR-only(ACLNNTYPE=aclnn_exclude,无 op_api/),DESIGN/REQUIREMENTS 已标注"暂未启用";是否在后续版本补建 ACLNN 接口属架构决策,本 PR 未新增 op_api 实现。 2. **canndev 仓(E3)**:950 ini [PopulationCount] section 上游已删除,架构师已定 canndev 不改,本 PR 对 canndev 零改动。 3. **产品支持声明**:README 支持表与代码双向一致,无历史误改需回退,本 PR 未做任何产品声明改动。 ### 环境与工具链限制 - **无 NPU/TTK**:GEIR 实机运行测试、TTK 异常证据测试均未执行(admission 标 UNAVAILABLE);本轮 ND 格式拒绝路径、白名单收紧后的 dtype 行为仅由 UT(模拟 TilingContext)覆盖,实机回归证据链待转测环境补齐。 - **日落 API 清单离线获取失败**:降级为本地静态扫描(无命中),待联网复核。 - **1.6/15.6 交付件一致性报告回写**:verification_result.csv 已双"一致"落库(8a47e70),但 admission transfer-report 15.6 未重跑 merge 回写仍渲染 N/A,需转测负责人重跑或人工判定闭合。 - **误报项不改**:15.4 缺约束(正则覆盖盲区,LLM 复核 4 项约束全部有实现)、15.5 f_dtype(解析器边界断言缺陷,README dtype 与 def 实际一致)人工复核为误报,未做改动。 ### 有意设计待背书 - **放弃原 §4.1 多核切分策略(每核 ≥4KB、512 元素对齐)**:v1.1 已将文档改写为与代码一致的 32 元素对齐简单均分(尾块由 kernel blockLength_ 钳位 + 溢出核跳过兜底),功能正确且有 UT 覆盖,但该设计取舍的修订人仅 CANNBot,缺人工评审背书记录;DESIGN §5.3 已保留"小 Shape 多核效率 中"风险提示。 ### 未修项索引 - 上述未完成事项共 5 条(禁区决策 1、有意设计背书 1、流程闭合 1、环境限制 2),逐条决策建议与修复条件详见 /home/s00947152/LongTail/guide/未修项明细/population_count_未修项明细.md。 See merge request: cann/ops-math!6195 | 4 天前 | |
[population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !6195 merge population_count_quality_hardening into master [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: # [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) ## 一、变更概述 针对 population_count(PopulationCount,ops-math/math/population_count)的转测准入白盒扫描(总体 FAIL,3 项 FAIL:E3 TBE ini 残留、15.4 缺约束、15.5 描述不准确,其中 15.4/15.5 经 LLM 复核为扫描器误报;X2 格式项人工 WARN)与代码检视(PASS 121/FAIL 2/SUSPICIOUS 1:TOPK-2、LOG-1、GEN-4.2;风格违规 STYLE-1.4;设计一致性 S1/S2/S5/D8 ❌)的发现,实施质量加固整改: - **Host 侧校验加固**:修复 InferShape 禁止模式(GetInputTensor → GetInputDesc,TOPK-2),infershape 白名单收紧为 {INT16,UINT16},verifier 白名单同口径收紧(X1/TOPK-2 四层口径一致),tiling 增加 ND 格式显式校验并补充 NCHW 拒绝 UT(X2/P4); - **日志与可维护性**:删除语义冗余裸 OP_LOGE 改用预定义错误宏(LOG-1),SWAR 位掩码魔数改为具名常量(GEN-4.2),snake_case 变量/常量命名整改(STYLE-1.4); - **资料收敛**:DESIGN.md/REQUIREMENTS.md v1.1 以代码为准同步(Kernel 入口去 _apt、GEIR-only 标注、§4.1 切分公式、TilingKey 2 变体、模板参数、ubBlockSize、D8 数字中文空格); - **用例与交付件**:新建 l2_exception.csv 4 例补齐 dtype/format 异常缺口,归档覆盖度报告与双"一致"验证证据。 ## 二、分类修改清单 ### 代码(ops-math/math/population_count/) | 条目 | 修改内容 | 文件 | |------|---------|------| | TOPK-2 | InferShape 改 GetInputDesc(0)->GetDataType() 获取 dtype(与 tiling 口径一致),白名单收紧为 {DT_INT16, DT_UINT16} | op_host/population_count_infershape.cpp:41,44 | | X1 / TOPK-2 | verifier 白名单由 8 种整数收紧为 {DT_INT16, DT_UINT16},与 def/infershape/tiling 四层口径一致 | op_graph/population_count_graph_infer.cpp:36 | | LOG-1 | 删除两处语义冗余裸 OP_LOGE,仅保留预定义宏 OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON(EZ0020 结构化上报) | op_host/population_count_infershape.cpp:46、op_graph/population_count_graph_infer.cpp:43 | | GEN-4.2 | SWAR 位掩码魔数改具名常量 SWAR_MASK_EVEN_BITS/LOW_TWO_BITS/LOW_NIBBLE/LOW_BYTE,替换 9 处引用(语义等价) | op_kernel/arch35/population_count.h:56-59、:153-180 | | STYLE-1.4 | 局部变量改小驼峰(inputShape/inputTensor/inputDtype/outputShape),静态 const 常量改全大写下划线(G_VEC_1_SHAPE) | op_host/population_count_infershape.cpp:37,41,44,53、op_host/arch35/population_count_tiling_arch35.cpp:38,43 | | X2 / P4 | tiling 新增 ND 存储格式显式校验(非 FORMAT_ND → OP_LOGE + GRAPH_FAILED),"仅 ND"升级为运行时契约 | op_host/arch35/population_count_tiling_arch35.cpp:89-93 | ### 资料(operator-artifacts/PopulationCount/) | 条目 | 修改内容 | 文件 | |------|---------|------| | S1 | DESIGN v1.1:Kernel 入口去 _apt 后缀(population_count.cpp / opFile.value="population_count");标注 ACLNN 通路未启用(ACLNNTYPE=aclnn_exclude、无 op_api/),用户视图 ACLNN 直接调用 ❌ | DESIGN.md:81、DESIGN.md:212-218 | | S2 | DESIGN v1.1:§4.1 并行策略改写为与 §2.3.2 一致的 32 元素对齐简单均分公式(删除 4KB/512 对齐旧公式);TilingKey 收敛为 BUFFER_MODE 单轴 2 变体 | DESIGN.md:623-633 | | S5 | DESIGN v1.1:Kernel 模板参数去 dtype 轴(仅 BUFFER_MODE,dtype 经构建宏注入);ubBlockSize 修正为 32 bytes | DESIGN.md §3.5/§3.10 | | D8 | DESIGN/REQUIREMENTS 数字与中文之间空格违规清理(约 89 + 17 处,1-bit 等英文技术名词保留) | DESIGN.md、REQUIREMENTS.md | | S1(需求侧) | REQUIREMENTS v1.1:调用方式表 ACLNN [ ],§5 ACLNN API 接口定义标注"暂未启用" | REQUIREMENTS.md:35,69-71 | | 覆盖度/一致性归档 | coverage_report.md(UINT8 伪缺口复核结论)、coverage_matrix.json、report.md、verification_result.csv(Constraint_Consistency=一致、Golden_Consistency=一致) | reports/、verification/ | ### 用例 | 条目 | 修改内容 | 文件 | |------|---------|------| | X2 配套 UT | 新增 tiling_invalid_format_nchw_rejected(NCHW × DT_INT16 4D 期望 GRAPH_FAILED) | tests/ut/op_host/arch35/test_population_count_tiling_arch35.cpp:142-148 | | 异常用例补全 | 新建 population_count_l2_exception.csv(4 条:int32/int8 dtype 异常、NCHW format×int16/uint16,remark 带 expected_error= 标记) | operator-artifacts/PopulationCount/测试用例/population_count_l2_exception.csv(新建) | ## 三、逐 commit 摘要 | # | Commit | 仓库 | 时间(UTC) | 类型 | 摘要 | |---|--------|------|------------|------|------| | 1 | d3da50831 | ops-math | 2026-09-24 08:09 | fix | TOPK-2:InferShape 改 GetInputDesc 取 dtype、白名单收紧为 INT16/UINT16(与 def/tiling 一致) | | 2 | a82cbae2d | ops-math | 2026-09-24 08:09 | fix | LOG-1:删除 infershape/graph_infer 两处语义冗余裸 OP_LOGE,保留预定义错误宏 | | 3 | 74e92f0df | ops-math | 2026-09-24 08:10 | refactor | GEN-4.2:SWAR 四个位掩码魔数改为具名常量并替换 9 处引用 | | 4 | ec51db8a9 | ops-math | 2026-09-24 08:10 | style | STYLE-1.4:局部变量改小驼峰、静态常量改全大写下划线(G_VEC_1_SHAPE) | | 5 | 21b903f0e | ops-math | 2026-09-24 10:38 | fix | X1/TOPK-2:verifier 白名单收紧为 INT16/UINT16,四层引流口径一致 | | 6 | c9595fe57 | ops-math | 2026-09-24 10:38 | fix | X2/P4:tiling 增加 ND 格式显式校验(非 FORMAT_ND 拒绝)+ NCHW 拒绝 UT | | 7 | 625b165 | operator-artifacts | 2026-09-24 09:10 | artifacts | 交付件同步(本算子部分):DESIGN/REQUIREMENTS v1.1(去 _apt、GEIR-only、§4.1 公式、TilingKey 2 变体、ubBlockSize、D8 空格清理)、新建 l2_exception.csv | | 8 | 8a47e70 | operator-artifacts | 2026-09-24 11:18 | artifacts | 交付件同步(本算子部分):reports/ 覆盖度归档(UINT8 伪缺口复核)、verification_result.csv 双"一致" | ## 四、测试与验证 - **Host UT:20/20 全通过**(infershape 7 例 + tiling 13 例;tiling 含本轮新增 tiling_invalid_format_nchw_rejected,以及 bfloat16/bool 错 dtype 拒绝负例、空 tensor/标量/阈值边界/多核等路径)。kernel 侧另有模拟 UT 3 例(all_zeros/empty_tensor/double_buffer_zeros)。 - **用例覆盖度**:kernel 归档 80.7 分(PASS,≥80%)。缺口复核:UINT8 枚举式缺口为伪缺口(UINT8 为固定输出 dtype,无对应输入通路);"不支持 dtype 异常用例缺失"与"format 异常×INT16/UINT16 缺失"已由本轮 l2_exception.csv 4 例 + tiling 显式校验覆盖(该 CSV 晚于 80.7 分评估时点,未计入分数)。 - **交付件一致性**:verification_result.csv Constraint_Consistency=一致、Golden_Consistency=一致(2026-09-24 复核)。 - **归档补测参照**:GEIR 14/15(唯一失败为 invalid 负向用例,EZ0020 dtype 预期拒绝)、tf 12/12。 - **静态复核**:全部整改均不触碰 SWAR 计算链语义(掩码具名、日志宏替换为等语义变更),计算正确性不受影响;整改条目与报告原文行号、commit 变更逐条对应(见 population_count_ISSUE.md)。 ## 五、未完成事项与限制 ### 三禁区声明(本次提交不涉及) 1. **ACLNN 通路(S1 残留能力决策)**:本算子 V1 维持 GEIR-only(ACLNNTYPE=aclnn_exclude,无 op_api/),DESIGN/REQUIREMENTS 已标注"暂未启用";是否在后续版本补建 ACLNN 接口属架构决策,本 PR 未新增 op_api 实现。 2. **canndev 仓(E3)**:950 ini [PopulationCount] section 上游已删除,架构师已定 canndev 不改,本 PR 对 canndev 零改动。 3. **产品支持声明**:README 支持表与代码双向一致,无历史误改需回退,本 PR 未做任何产品声明改动。 ### 环境与工具链限制 - **无 NPU/TTK**:GEIR 实机运行测试、TTK 异常证据测试均未执行(admission 标 UNAVAILABLE);本轮 ND 格式拒绝路径、白名单收紧后的 dtype 行为仅由 UT(模拟 TilingContext)覆盖,实机回归证据链待转测环境补齐。 - **日落 API 清单离线获取失败**:降级为本地静态扫描(无命中),待联网复核。 - **1.6/15.6 交付件一致性报告回写**:verification_result.csv 已双"一致"落库(8a47e70),但 admission transfer-report 15.6 未重跑 merge 回写仍渲染 N/A,需转测负责人重跑或人工判定闭合。 - **误报项不改**:15.4 缺约束(正则覆盖盲区,LLM 复核 4 项约束全部有实现)、15.5 f_dtype(解析器边界断言缺陷,README dtype 与 def 实际一致)人工复核为误报,未做改动。 ### 有意设计待背书 - **放弃原 §4.1 多核切分策略(每核 ≥4KB、512 元素对齐)**:v1.1 已将文档改写为与代码一致的 32 元素对齐简单均分(尾块由 kernel blockLength_ 钳位 + 溢出核跳过兜底),功能正确且有 UT 覆盖,但该设计取舍的修订人仅 CANNBot,缺人工评审背书记录;DESIGN §5.3 已保留"小 Shape 多核效率 中"风险提示。 ### 未修项索引 - 上述未完成事项共 5 条(禁区决策 1、有意设计背书 1、流程闭合 1、环境限制 2),逐条决策建议与修复条件详见 /home/s00947152/LongTail/guide/未修项明细/population_count_未修项明细.md。 See merge request: cann/ops-math!6195 | 4 天前 | |
[population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !6195 merge population_count_quality_hardening into master [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: # [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) ## 一、变更概述 针对 population_count(PopulationCount,ops-math/math/population_count)的转测准入白盒扫描(总体 FAIL,3 项 FAIL:E3 TBE ini 残留、15.4 缺约束、15.5 描述不准确,其中 15.4/15.5 经 LLM 复核为扫描器误报;X2 格式项人工 WARN)与代码检视(PASS 121/FAIL 2/SUSPICIOUS 1:TOPK-2、LOG-1、GEN-4.2;风格违规 STYLE-1.4;设计一致性 S1/S2/S5/D8 ❌)的发现,实施质量加固整改: - **Host 侧校验加固**:修复 InferShape 禁止模式(GetInputTensor → GetInputDesc,TOPK-2),infershape 白名单收紧为 {INT16,UINT16},verifier 白名单同口径收紧(X1/TOPK-2 四层口径一致),tiling 增加 ND 格式显式校验并补充 NCHW 拒绝 UT(X2/P4); - **日志与可维护性**:删除语义冗余裸 OP_LOGE 改用预定义错误宏(LOG-1),SWAR 位掩码魔数改为具名常量(GEN-4.2),snake_case 变量/常量命名整改(STYLE-1.4); - **资料收敛**:DESIGN.md/REQUIREMENTS.md v1.1 以代码为准同步(Kernel 入口去 _apt、GEIR-only 标注、§4.1 切分公式、TilingKey 2 变体、模板参数、ubBlockSize、D8 数字中文空格); - **用例与交付件**:新建 l2_exception.csv 4 例补齐 dtype/format 异常缺口,归档覆盖度报告与双"一致"验证证据。 ## 二、分类修改清单 ### 代码(ops-math/math/population_count/) | 条目 | 修改内容 | 文件 | |------|---------|------| | TOPK-2 | InferShape 改 GetInputDesc(0)->GetDataType() 获取 dtype(与 tiling 口径一致),白名单收紧为 {DT_INT16, DT_UINT16} | op_host/population_count_infershape.cpp:41,44 | | X1 / TOPK-2 | verifier 白名单由 8 种整数收紧为 {DT_INT16, DT_UINT16},与 def/infershape/tiling 四层口径一致 | op_graph/population_count_graph_infer.cpp:36 | | LOG-1 | 删除两处语义冗余裸 OP_LOGE,仅保留预定义宏 OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON(EZ0020 结构化上报) | op_host/population_count_infershape.cpp:46、op_graph/population_count_graph_infer.cpp:43 | | GEN-4.2 | SWAR 位掩码魔数改具名常量 SWAR_MASK_EVEN_BITS/LOW_TWO_BITS/LOW_NIBBLE/LOW_BYTE,替换 9 处引用(语义等价) | op_kernel/arch35/population_count.h:56-59、:153-180 | | STYLE-1.4 | 局部变量改小驼峰(inputShape/inputTensor/inputDtype/outputShape),静态 const 常量改全大写下划线(G_VEC_1_SHAPE) | op_host/population_count_infershape.cpp:37,41,44,53、op_host/arch35/population_count_tiling_arch35.cpp:38,43 | | X2 / P4 | tiling 新增 ND 存储格式显式校验(非 FORMAT_ND → OP_LOGE + GRAPH_FAILED),"仅 ND"升级为运行时契约 | op_host/arch35/population_count_tiling_arch35.cpp:89-93 | ### 资料(operator-artifacts/PopulationCount/) | 条目 | 修改内容 | 文件 | |------|---------|------| | S1 | DESIGN v1.1:Kernel 入口去 _apt 后缀(population_count.cpp / opFile.value="population_count");标注 ACLNN 通路未启用(ACLNNTYPE=aclnn_exclude、无 op_api/),用户视图 ACLNN 直接调用 ❌ | DESIGN.md:81、DESIGN.md:212-218 | | S2 | DESIGN v1.1:§4.1 并行策略改写为与 §2.3.2 一致的 32 元素对齐简单均分公式(删除 4KB/512 对齐旧公式);TilingKey 收敛为 BUFFER_MODE 单轴 2 变体 | DESIGN.md:623-633 | | S5 | DESIGN v1.1:Kernel 模板参数去 dtype 轴(仅 BUFFER_MODE,dtype 经构建宏注入);ubBlockSize 修正为 32 bytes | DESIGN.md §3.5/§3.10 | | D8 | DESIGN/REQUIREMENTS 数字与中文之间空格违规清理(约 89 + 17 处,1-bit 等英文技术名词保留) | DESIGN.md、REQUIREMENTS.md | | S1(需求侧) | REQUIREMENTS v1.1:调用方式表 ACLNN [ ],§5 ACLNN API 接口定义标注"暂未启用" | REQUIREMENTS.md:35,69-71 | | 覆盖度/一致性归档 | coverage_report.md(UINT8 伪缺口复核结论)、coverage_matrix.json、report.md、verification_result.csv(Constraint_Consistency=一致、Golden_Consistency=一致) | reports/、verification/ | ### 用例 | 条目 | 修改内容 | 文件 | |------|---------|------| | X2 配套 UT | 新增 tiling_invalid_format_nchw_rejected(NCHW × DT_INT16 4D 期望 GRAPH_FAILED) | tests/ut/op_host/arch35/test_population_count_tiling_arch35.cpp:142-148 | | 异常用例补全 | 新建 population_count_l2_exception.csv(4 条:int32/int8 dtype 异常、NCHW format×int16/uint16,remark 带 expected_error= 标记) | operator-artifacts/PopulationCount/测试用例/population_count_l2_exception.csv(新建) | ## 三、逐 commit 摘要 | # | Commit | 仓库 | 时间(UTC) | 类型 | 摘要 | |---|--------|------|------------|------|------| | 1 | d3da50831 | ops-math | 2026-09-24 08:09 | fix | TOPK-2:InferShape 改 GetInputDesc 取 dtype、白名单收紧为 INT16/UINT16(与 def/tiling 一致) | | 2 | a82cbae2d | ops-math | 2026-09-24 08:09 | fix | LOG-1:删除 infershape/graph_infer 两处语义冗余裸 OP_LOGE,保留预定义错误宏 | | 3 | 74e92f0df | ops-math | 2026-09-24 08:10 | refactor | GEN-4.2:SWAR 四个位掩码魔数改为具名常量并替换 9 处引用 | | 4 | ec51db8a9 | ops-math | 2026-09-24 08:10 | style | STYLE-1.4:局部变量改小驼峰、静态常量改全大写下划线(G_VEC_1_SHAPE) | | 5 | 21b903f0e | ops-math | 2026-09-24 10:38 | fix | X1/TOPK-2:verifier 白名单收紧为 INT16/UINT16,四层引流口径一致 | | 6 | c9595fe57 | ops-math | 2026-09-24 10:38 | fix | X2/P4:tiling 增加 ND 格式显式校验(非 FORMAT_ND 拒绝)+ NCHW 拒绝 UT | | 7 | 625b165 | operator-artifacts | 2026-09-24 09:10 | artifacts | 交付件同步(本算子部分):DESIGN/REQUIREMENTS v1.1(去 _apt、GEIR-only、§4.1 公式、TilingKey 2 变体、ubBlockSize、D8 空格清理)、新建 l2_exception.csv | | 8 | 8a47e70 | operator-artifacts | 2026-09-24 11:18 | artifacts | 交付件同步(本算子部分):reports/ 覆盖度归档(UINT8 伪缺口复核)、verification_result.csv 双"一致" | ## 四、测试与验证 - **Host UT:20/20 全通过**(infershape 7 例 + tiling 13 例;tiling 含本轮新增 tiling_invalid_format_nchw_rejected,以及 bfloat16/bool 错 dtype 拒绝负例、空 tensor/标量/阈值边界/多核等路径)。kernel 侧另有模拟 UT 3 例(all_zeros/empty_tensor/double_buffer_zeros)。 - **用例覆盖度**:kernel 归档 80.7 分(PASS,≥80%)。缺口复核:UINT8 枚举式缺口为伪缺口(UINT8 为固定输出 dtype,无对应输入通路);"不支持 dtype 异常用例缺失"与"format 异常×INT16/UINT16 缺失"已由本轮 l2_exception.csv 4 例 + tiling 显式校验覆盖(该 CSV 晚于 80.7 分评估时点,未计入分数)。 - **交付件一致性**:verification_result.csv Constraint_Consistency=一致、Golden_Consistency=一致(2026-09-24 复核)。 - **归档补测参照**:GEIR 14/15(唯一失败为 invalid 负向用例,EZ0020 dtype 预期拒绝)、tf 12/12。 - **静态复核**:全部整改均不触碰 SWAR 计算链语义(掩码具名、日志宏替换为等语义变更),计算正确性不受影响;整改条目与报告原文行号、commit 变更逐条对应(见 population_count_ISSUE.md)。 ## 五、未完成事项与限制 ### 三禁区声明(本次提交不涉及) 1. **ACLNN 通路(S1 残留能力决策)**:本算子 V1 维持 GEIR-only(ACLNNTYPE=aclnn_exclude,无 op_api/),DESIGN/REQUIREMENTS 已标注"暂未启用";是否在后续版本补建 ACLNN 接口属架构决策,本 PR 未新增 op_api 实现。 2. **canndev 仓(E3)**:950 ini [PopulationCount] section 上游已删除,架构师已定 canndev 不改,本 PR 对 canndev 零改动。 3. **产品支持声明**:README 支持表与代码双向一致,无历史误改需回退,本 PR 未做任何产品声明改动。 ### 环境与工具链限制 - **无 NPU/TTK**:GEIR 实机运行测试、TTK 异常证据测试均未执行(admission 标 UNAVAILABLE);本轮 ND 格式拒绝路径、白名单收紧后的 dtype 行为仅由 UT(模拟 TilingContext)覆盖,实机回归证据链待转测环境补齐。 - **日落 API 清单离线获取失败**:降级为本地静态扫描(无命中),待联网复核。 - **1.6/15.6 交付件一致性报告回写**:verification_result.csv 已双"一致"落库(8a47e70),但 admission transfer-report 15.6 未重跑 merge 回写仍渲染 N/A,需转测负责人重跑或人工判定闭合。 - **误报项不改**:15.4 缺约束(正则覆盖盲区,LLM 复核 4 项约束全部有实现)、15.5 f_dtype(解析器边界断言缺陷,README dtype 与 def 实际一致)人工复核为误报,未做改动。 ### 有意设计待背书 - **放弃原 §4.1 多核切分策略(每核 ≥4KB、512 元素对齐)**:v1.1 已将文档改写为与代码一致的 32 元素对齐简单均分(尾块由 kernel blockLength_ 钳位 + 溢出核跳过兜底),功能正确且有 UT 覆盖,但该设计取舍的修订人仅 CANNBot,缺人工评审背书记录;DESIGN §5.3 已保留"小 Shape 多核效率 中"风险提示。 ### 未修项索引 - 上述未完成事项共 5 条(禁区决策 1、有意设计背书 1、流程闭合 1、环境限制 2),逐条决策建议与修复条件详见 /home/s00947152/LongTail/guide/未修项明细/population_count_未修项明细.md。 See merge request: cann/ops-math!6195 | 4 天前 | |
math仓算子适配350 Co-authored-by: zhouliang<zhouliang88@huawei.com> # message auto-generated for no-merge-commit merge: !5906 merge master into master math仓算子适配350 Created-by: zhou-liang1027 Commit-by: zhouliang Merged-by: cann-robot Description: ## 描述 math仓算子适配350 ## 关联的Issue [math仓算子适配350](https://gitcode.com/cann/ops-math/issues/3463) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5906 | 8 天前 | |
[population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !6195 merge population_count_quality_hardening into master [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: # [population_count] quality-hardening:算子质量加固修复(准入+检视问题整改) ## 一、变更概述 针对 population_count(PopulationCount,ops-math/math/population_count)的转测准入白盒扫描(总体 FAIL,3 项 FAIL:E3 TBE ini 残留、15.4 缺约束、15.5 描述不准确,其中 15.4/15.5 经 LLM 复核为扫描器误报;X2 格式项人工 WARN)与代码检视(PASS 121/FAIL 2/SUSPICIOUS 1:TOPK-2、LOG-1、GEN-4.2;风格违规 STYLE-1.4;设计一致性 S1/S2/S5/D8 ❌)的发现,实施质量加固整改: - **Host 侧校验加固**:修复 InferShape 禁止模式(GetInputTensor → GetInputDesc,TOPK-2),infershape 白名单收紧为 {INT16,UINT16},verifier 白名单同口径收紧(X1/TOPK-2 四层口径一致),tiling 增加 ND 格式显式校验并补充 NCHW 拒绝 UT(X2/P4); - **日志与可维护性**:删除语义冗余裸 OP_LOGE 改用预定义错误宏(LOG-1),SWAR 位掩码魔数改为具名常量(GEN-4.2),snake_case 变量/常量命名整改(STYLE-1.4); - **资料收敛**:DESIGN.md/REQUIREMENTS.md v1.1 以代码为准同步(Kernel 入口去 _apt、GEIR-only 标注、§4.1 切分公式、TilingKey 2 变体、模板参数、ubBlockSize、D8 数字中文空格); - **用例与交付件**:新建 l2_exception.csv 4 例补齐 dtype/format 异常缺口,归档覆盖度报告与双"一致"验证证据。 ## 二、分类修改清单 ### 代码(ops-math/math/population_count/) | 条目 | 修改内容 | 文件 | |------|---------|------| | TOPK-2 | InferShape 改 GetInputDesc(0)->GetDataType() 获取 dtype(与 tiling 口径一致),白名单收紧为 {DT_INT16, DT_UINT16} | op_host/population_count_infershape.cpp:41,44 | | X1 / TOPK-2 | verifier 白名单由 8 种整数收紧为 {DT_INT16, DT_UINT16},与 def/infershape/tiling 四层口径一致 | op_graph/population_count_graph_infer.cpp:36 | | LOG-1 | 删除两处语义冗余裸 OP_LOGE,仅保留预定义宏 OP_LOGE_FOR_INVALID_DTYPE_WITH_REASON(EZ0020 结构化上报) | op_host/population_count_infershape.cpp:46、op_graph/population_count_graph_infer.cpp:43 | | GEN-4.2 | SWAR 位掩码魔数改具名常量 SWAR_MASK_EVEN_BITS/LOW_TWO_BITS/LOW_NIBBLE/LOW_BYTE,替换 9 处引用(语义等价) | op_kernel/arch35/population_count.h:56-59、:153-180 | | STYLE-1.4 | 局部变量改小驼峰(inputShape/inputTensor/inputDtype/outputShape),静态 const 常量改全大写下划线(G_VEC_1_SHAPE) | op_host/population_count_infershape.cpp:37,41,44,53、op_host/arch35/population_count_tiling_arch35.cpp:38,43 | | X2 / P4 | tiling 新增 ND 存储格式显式校验(非 FORMAT_ND → OP_LOGE + GRAPH_FAILED),"仅 ND"升级为运行时契约 | op_host/arch35/population_count_tiling_arch35.cpp:89-93 | ### 资料(operator-artifacts/PopulationCount/) | 条目 | 修改内容 | 文件 | |------|---------|------| | S1 | DESIGN v1.1:Kernel 入口去 _apt 后缀(population_count.cpp / opFile.value="population_count");标注 ACLNN 通路未启用(ACLNNTYPE=aclnn_exclude、无 op_api/),用户视图 ACLNN 直接调用 ❌ | DESIGN.md:81、DESIGN.md:212-218 | | S2 | DESIGN v1.1:§4.1 并行策略改写为与 §2.3.2 一致的 32 元素对齐简单均分公式(删除 4KB/512 对齐旧公式);TilingKey 收敛为 BUFFER_MODE 单轴 2 变体 | DESIGN.md:623-633 | | S5 | DESIGN v1.1:Kernel 模板参数去 dtype 轴(仅 BUFFER_MODE,dtype 经构建宏注入);ubBlockSize 修正为 32 bytes | DESIGN.md §3.5/§3.10 | | D8 | DESIGN/REQUIREMENTS 数字与中文之间空格违规清理(约 89 + 17 处,1-bit 等英文技术名词保留) | DESIGN.md、REQUIREMENTS.md | | S1(需求侧) | REQUIREMENTS v1.1:调用方式表 ACLNN [ ],§5 ACLNN API 接口定义标注"暂未启用" | REQUIREMENTS.md:35,69-71 | | 覆盖度/一致性归档 | coverage_report.md(UINT8 伪缺口复核结论)、coverage_matrix.json、report.md、verification_result.csv(Constraint_Consistency=一致、Golden_Consistency=一致) | reports/、verification/ | ### 用例 | 条目 | 修改内容 | 文件 | |------|---------|------| | X2 配套 UT | 新增 tiling_invalid_format_nchw_rejected(NCHW × DT_INT16 4D 期望 GRAPH_FAILED) | tests/ut/op_host/arch35/test_population_count_tiling_arch35.cpp:142-148 | | 异常用例补全 | 新建 population_count_l2_exception.csv(4 条:int32/int8 dtype 异常、NCHW format×int16/uint16,remark 带 expected_error= 标记) | operator-artifacts/PopulationCount/测试用例/population_count_l2_exception.csv(新建) | ## 三、逐 commit 摘要 | # | Commit | 仓库 | 时间(UTC) | 类型 | 摘要 | |---|--------|------|------------|------|------| | 1 | d3da50831 | ops-math | 2026-09-24 08:09 | fix | TOPK-2:InferShape 改 GetInputDesc 取 dtype、白名单收紧为 INT16/UINT16(与 def/tiling 一致) | | 2 | a82cbae2d | ops-math | 2026-09-24 08:09 | fix | LOG-1:删除 infershape/graph_infer 两处语义冗余裸 OP_LOGE,保留预定义错误宏 | | 3 | 74e92f0df | ops-math | 2026-09-24 08:10 | refactor | GEN-4.2:SWAR 四个位掩码魔数改为具名常量并替换 9 处引用 | | 4 | ec51db8a9 | ops-math | 2026-09-24 08:10 | style | STYLE-1.4:局部变量改小驼峰、静态常量改全大写下划线(G_VEC_1_SHAPE) | | 5 | 21b903f0e | ops-math | 2026-09-24 10:38 | fix | X1/TOPK-2:verifier 白名单收紧为 INT16/UINT16,四层引流口径一致 | | 6 | c9595fe57 | ops-math | 2026-09-24 10:38 | fix | X2/P4:tiling 增加 ND 格式显式校验(非 FORMAT_ND 拒绝)+ NCHW 拒绝 UT | | 7 | 625b165 | operator-artifacts | 2026-09-24 09:10 | artifacts | 交付件同步(本算子部分):DESIGN/REQUIREMENTS v1.1(去 _apt、GEIR-only、§4.1 公式、TilingKey 2 变体、ubBlockSize、D8 空格清理)、新建 l2_exception.csv | | 8 | 8a47e70 | operator-artifacts | 2026-09-24 11:18 | artifacts | 交付件同步(本算子部分):reports/ 覆盖度归档(UINT8 伪缺口复核)、verification_result.csv 双"一致" | ## 四、测试与验证 - **Host UT:20/20 全通过**(infershape 7 例 + tiling 13 例;tiling 含本轮新增 tiling_invalid_format_nchw_rejected,以及 bfloat16/bool 错 dtype 拒绝负例、空 tensor/标量/阈值边界/多核等路径)。kernel 侧另有模拟 UT 3 例(all_zeros/empty_tensor/double_buffer_zeros)。 - **用例覆盖度**:kernel 归档 80.7 分(PASS,≥80%)。缺口复核:UINT8 枚举式缺口为伪缺口(UINT8 为固定输出 dtype,无对应输入通路);"不支持 dtype 异常用例缺失"与"format 异常×INT16/UINT16 缺失"已由本轮 l2_exception.csv 4 例 + tiling 显式校验覆盖(该 CSV 晚于 80.7 分评估时点,未计入分数)。 - **交付件一致性**:verification_result.csv Constraint_Consistency=一致、Golden_Consistency=一致(2026-09-24 复核)。 - **归档补测参照**:GEIR 14/15(唯一失败为 invalid 负向用例,EZ0020 dtype 预期拒绝)、tf 12/12。 - **静态复核**:全部整改均不触碰 SWAR 计算链语义(掩码具名、日志宏替换为等语义变更),计算正确性不受影响;整改条目与报告原文行号、commit 变更逐条对应(见 population_count_ISSUE.md)。 ## 五、未完成事项与限制 ### 三禁区声明(本次提交不涉及) 1. **ACLNN 通路(S1 残留能力决策)**:本算子 V1 维持 GEIR-only(ACLNNTYPE=aclnn_exclude,无 op_api/),DESIGN/REQUIREMENTS 已标注"暂未启用";是否在后续版本补建 ACLNN 接口属架构决策,本 PR 未新增 op_api 实现。 2. **canndev 仓(E3)**:950 ini [PopulationCount] section 上游已删除,架构师已定 canndev 不改,本 PR 对 canndev 零改动。 3. **产品支持声明**:README 支持表与代码双向一致,无历史误改需回退,本 PR 未做任何产品声明改动。 ### 环境与工具链限制 - **无 NPU/TTK**:GEIR 实机运行测试、TTK 异常证据测试均未执行(admission 标 UNAVAILABLE);本轮 ND 格式拒绝路径、白名单收紧后的 dtype 行为仅由 UT(模拟 TilingContext)覆盖,实机回归证据链待转测环境补齐。 - **日落 API 清单离线获取失败**:降级为本地静态扫描(无命中),待联网复核。 - **1.6/15.6 交付件一致性报告回写**:verification_result.csv 已双"一致"落库(8a47e70),但 admission transfer-report 15.6 未重跑 merge 回写仍渲染 N/A,需转测负责人重跑或人工判定闭合。 - **误报项不改**:15.4 缺约束(正则覆盖盲区,LLM 复核 4 项约束全部有实现)、15.5 f_dtype(解析器边界断言缺陷,README dtype 与 def 实际一致)人工复核为误报,未做改动。 ### 有意设计待背书 - **放弃原 §4.1 多核切分策略(每核 ≥4KB、512 元素对齐)**:v1.1 已将文档改写为与代码一致的 32 元素对齐简单均分(尾块由 kernel blockLength_ 钳位 + 溢出核跳过兜底),功能正确且有 UT 覆盖,但该设计取舍的修订人仅 CANNBot,缺人工评审背书记录;DESIGN §5.3 已保留"小 Shape 多核效率 中"风险提示。 ### 未修项索引 - 上述未完成事项共 5 条(禁区决策 1、有意设计背书 1、流程闭合 1、环境限制 2),逐条决策建议与修复条件详见 /home/s00947152/LongTail/guide/未修项明细/population_count_未修项明细.md。 See merge request: cann/ops-math!6195 | 4 天前 |
PopulationCount
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
-
算子功能:逐元素统计输入张量中每个16比特整数的二进制表示中bit=1的个数(population count,亦称Hamming weight / popcount)。
-
计算公式:
yi=popcount(xi)y_i = \text{popcount}(x_i) yi=popcount(xi)
其中:
-
xix_ixi:输入张量的第i个元素,按无符号16位宽解释(INT16负数按二进制补码逐比特计数)
-
yiy_iyi:输出张量的第i个元素,取值范围为 [0,16][0, 16][0,16]
-
使用场景:汉明距离计算、稀疏性分析、位掩码处理等需要统计二进制位数的场景。
参数说明
| 参数名 | 输入/输出 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 待统计的整数张量,对应公式中的x。支持0-8维Tensor,0维表示标量。 | INT16、UINT16 | ND |
| y | 输出 | 每个元素对应的位计数结果,对应公式中的y。shape与x一致。 | UINT8 | ND |
约束说明
- 输入x的数据类型必须为INT16或UINT16,输出y的数据类型固定为UINT8。
- 输出y的shape必须与输入x的shape完全一致,不支持广播。
- 支持0-8维Tensor,0维表示标量。
- 支持空Tensor(元素个数为0),直接返回空结果。
- 支持动态shape与动态rank,shape不确定的场景下仍可正确执行。
- 输入连续与非连续均支持,非连续输入由框架自动转为连续后再计算。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_population_count | 通过算子IR构图方式调用PopulationCount算子。 |