CANN/cannbot-skills Ascend C算子白盒测试设计模板

📅 2026/7/4 8:32:50
CANN/cannbot-skills Ascend C算子白盒测试设计模板
S2P3_test_design.md 模板【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills用途源码分析完成后根据此模板生成 S2P3_test_design.md。 输入来源参数推导结果S2P2_param_def.json 常见网络 shapelow_configs 用户确认结果。必填章节# {OpName} 白盒测试设计 ## 1. 输入概览 | 输入类别 | 是否提供 | 说明 | |----------|----------|------| | torch 接口 | 是/否 | | | tiling 代码 | 是/否框架代理 | | | kernel 代码 | 是/否 | | | 资料描述 | 是/否 | | ## 2. 事实摘要 | 项目 | 结论 | 来源类别 | 类型 | |------|------|----------|------| ## 3. 代码路径全景 从 tiling 入口到 kernel 叶子节点的完整分支树主 Agent 根据 S2P1_path_list.json 的 paths 数组和 source_constraints 重建 --- {op_name} ({平台}路径) ├── 条件 ... │ └── [路径名] ... │ ├── 子条件 ... → 函数/指令 │ └── 子条件 ... → 函数/指令 └── 条件 ... └── ... --- 共 {N} 条路径N 必须等于 S2P1_path_list.json paths 数组长度分为 {M} 个 groupM 必须等于 S2P2_param_def.json groups 数组长度。 **约束** - 每条路径必须单独列出禁止折叠如内部复用各 tiling mode的概述写法不允许 - 路径 ID 必须与 S2P1_path_list.json 中的 id 一一对应 - 路径总数 N S2P1_path_list.json paths 数组长度不含 disputed - group 总数 M S2P2_param_def.json groups 数组长度 ## 4. 关键派生变量 | 变量 | 公式 | 依赖项 | 是否参与分支 | 来源 | |------|------|--------|--------------|------| ## 5. 测试关注点groups 每个 group 自包含路由条件 约束 维度表 预估组合数。 **约束** - group 列表必须与 S2P2_param_def.json groups 数组完全一致数量、id、顺序 - 每个 group 中的维度值必须与 S2P2_param_def.json 中对应 group 的 per_dtype 取值列表及 group 级维度字段一致标量属性默认值必须与 S2P1_operator_model.json 的 attributes 默认值一致 - 禁止在 S2P3_test_design.md 中引入 S2P2_param_def.json 中不存在的维度值 - 每个 group 的 constraints 描述必须与 S2P2_param_def.json 中对应 group 的 constraints 语义一致 ### 5.N {group_id} **路由条件**{什么条件进入此路径} **约束**{此路径下的参数限制} | 维度 | 值或边界 | 轴角色 | 来源 | |------|---------|--------|------| | {dim_name} | {values or thresholds} | {core_split / ub_tile / instruction_align / attr} | {source:line} | **预估组合数**估算 ~{N} 重复 5.1, 5.2, ... 每个 group ## 6. 执行模式分析 ### 轴映射 | 执行层级 | 映射轴 | 控制变量 | 来源 | |---------|--------|---------|------| | 分核 | {axis_name} | {CeilDiv(dim, coreNum)} | {source} | | UB 切分 | {axis_name} | {UbFactor 公式} | {source} | | 指令对齐 | {axis_name} | {BLOCK_ELEM / VL 常量} | {source} | ### 三层覆盖策略 | 层级 | 模式 | 触发条件 | 对应维度取值 | |------|------|---------|-------------| | 分核 | 未开满核 | dim coreNum | {dim}1 | | 分核 | 开满核无尾核单倍 | dim coreNum | {dim}{coreNum} | | 分核 | 开满核无尾核多倍 | dim k*coreNum | {dim}2*coreNum, 4*coreNum | | 分核 | 开满核有尾核 | dim % coreNum ! 0 | {dim}{coreNum1} | | UB | 单 pass | 数据量 UbFactor | {dim} 取小值 | | UB | 多 pass 尾块 | 数据量 UbFactor 且不整除 | {dim} 取大值 | | 指令 | 对齐 | dim % vectorWidth 0 | {dim}{aligned_value} | | 指令 | 非对齐 | dim % vectorWidth ! 0 | {dim}{k*v-1 展开值} | ## 7. 未确认项 以下内容无法从当前输入中确认**需要用户决定** | # | 问题 | 原因 | 建议处理 | |---|------|------|---------| | 1 | {问题} | {为什么不确定} | 忽略 / 需要补充信息 / 需要额外测试 | Step 2 完成后将此表展示给用户等用户逐条确认或补充后再继续。 ## 8. 设计估算 | 项目 | 值 | 说明 | |------|----|------| ## 9. 验证结论 Step 3 完成后由 verifier 填写通用维度指引data_range每个 group 应包含data_range维度除非算子有特殊限制控制输入 tensor 的数据值域data_range: [normal, zero, extreme, negative, tiny_pos, all_ones, near_zero, with_inf, with_nan]标签含义测什么normaltorch.randn 正态随机一般场景zero全零零值传播、除零保护extreme接近 dtype 最大值溢出、饱和negative全负数sigmoid/silu 负值分支tiny_pos极小正数~1e-6精度损失、scale 除零all_ones全 1恒等验证near_zero接近零的正负混合符号翻转、舍入with_inf正常数据中混入 infinf 传播处理with_nan正常数据中混入 nannan 传播处理不需要全部包含——根据算子语义选择有意义的。量化算子至少需要 normal/zero/extreme/negative。定义域约束当S2P1_operator_model.json中某输入的value_domain非 null 时Step 5c 的expand_high()会自动过滤不兼容的 data_range 标签make_data(normal)会约束生成范围。设计阶段无需手动裁剪 data_range 列表但需在 S2P3_test_design.md 中标注哪些输入有 value_domain 约束。ndim如果算子支持多种 rank如 ndim 2~8加为维度ndim: [2, 3, 4]pytest 代码根据 ndim 构造不同 rank 的 tensor如 ndim2 →[batch, D]ndim4 →[B, N, S, D]。如果算子固定 ndim如必须 4D不加此维度。【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考