当前位置: 首页 > news >正文

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)+ 常见网络 shape(low_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} 个 group(M 必须等于 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}={coreNum+1} | | 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(如 ndim=2 →[batch, D],ndim=4 →[B, N, S, D])。如果算子固定 ndim(如必须 4D),不加此维度。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.gsyq.cn/news/1632599.html

相关文章:

  • Blazingly-fast AI聊天新纪元:开源免费应用chat0全面解析
  • 线性回归模型评估:5个核心指标(R²、MSE、MAE)的Python实现与解读
  • E-Viewer开发者指南:如何贡献代码并参与开源项目协作
  • 分布式架构下的AI代理翻译服务:5大微服务集成策略解析
  • FPDF核心功能详解:掌握Cell、MultiCell和Write方法
  • OpenRadioss开源社区贡献指南:如何参与代码开发与功能改进
  • Buzz离线音频转录工具:3步解决模型下载慢的终极指南
  • jupyterlab-vim核心功能解析:从模式切换到高效单元格操作
  • 【计算机Java毕业设计案例】基于 JavaWeb 的客运票务数据统计分析系统的设计与实现 车站班次运维与实时发车信息推送系统(程序+文档+讲解+定制)
  • FLoRes项目终极指南:从FLORES-101到200的低资源机器翻译革命
  • cann/asc-devkit:SetSingleOutputShape接口
  • RVC变声器完整指南:10分钟训练高质量AI音色模型
  • 3步永久保存微信聊天记录:免费工具让珍贵对话永不丢失
  • ContEx未来展望:路线图分析和功能预测
  • 从0到1理解kube-prod-runtime:为什么它是Kubernetes生产环境的终极选择
  • 3个关键配置让洛雪音乐音质飙升200%:全网最全音源探索指南
  • AzaharPlus兼容性测试:哪些3DS游戏能完美运行?实测报告
  • Error Lens状态栏功能:实时监控代码问题的实用技巧
  • Neural Amp Modeler终极指南:从零开始训练专业级吉他音箱模拟模型
  • CANN/Qwen3-Next算子扩展
  • CodexBar终极指南:一站式掌控所有AI工具的用量监控
  • 逆向工程实战:Python脚本解析与生成IDA Pro授权文件
  • 深入理解Offix hooks:useQuery、useSave与离线数据操作技巧
  • 终极指南:yuzu Switch模拟器Android版架构深度解析与技术实现
  • CANN材料化学仿真预测:PID步响应特征提取
  • 基于YOLOv11的零售柜商品检测系统设计与实现
  • 3步搞定!tchMaterial-parser让您轻松获取智慧教育平台电子课本
  • 如何用CC Switch轻松管理所有AI编程工具:5分钟终极入门指南
  • 5分钟掌握DuckLake:SQL原生数据湖的现代数据管理方案
  • 3步打造你的脑机接口:用Arduino轻松读取脑电波数据的终极指南