当前位置: 首页 > 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.jsqmd.com/news/1120618/

相关文章:

  • HookLib² C++辅助工具使用指南:HookFactory与模板函数实战
  • 升势动能主图之红钻选股指标公式
  • 深入理解tools.cli的核心功能:parse-opts函数全方位解析
  • Blazingly-fast AI聊天新纪元:开源免费应用chat0全面解析
  • RestFB性能优化技巧:如何高效管理Facebook API调用
  • AI与SQL结合:SQL Ultimate Course智能查询新趋势
  • 百度网盘秒传链接网页工具终极指南:从零开始快速掌握文件极速转存
  • ContEx数据集处理:从原始数据到精美图表的完整流程指南
  • 如何用Flask-profiler定位最耗时的API端点?实战案例分享
  • 分布式架构下的AI代理翻译服务:5大微服务集成策略解析
  • d3-annotation与D3.js集成教程:打造交互式数据可视化注释
  • 线性回归模型评估:5个核心指标(R²、MSE、MAE)的Python实现与解读
  • 如何使用InVesalius进行医学影像分割?5个实用技巧让你快速上手
  • E-Viewer开发者指南:如何贡献代码并参与开源项目协作
  • Node.js原生模块编译的终极指南:掌握node-gyp构建工具
  • OWASP Mutillidae II高级实战:CSRF Token绕过与命令注入过滤突破
  • 零代码游戏开发:GDevelop如何让编程小白30分钟做出专业级游戏
  • SQL Ultimate Course数据集详解:从零开始的数据库构建
  • FPDF核心功能详解:掌握Cell、MultiCell和Write方法
  • 豆包大模型API接入与本地轻量替代方案实践
  • OpenRadioss开源社区贡献指南:如何参与代码开发与功能改进
  • Instatic数据库变更管理:迁移脚本与版本控制完全指南
  • 如何高效使用Stable Video Diffusion 1.1:让静态图片“活“起来的终极指南
  • EtsyBlur:打造Android玻璃态模糊效果的终极指南
  • 从“是什么“到“为什么“:现代系统诊断工具witr如何重新定义进程分析范式
  • 3种Word文档附件嵌入方案对比:poi-tl如何让你的报告不再分散
  • PTEF框架实战:如何使用威胁情报驱动紫队演练的完整流程
  • Buzz离线音频转录工具:3步解决模型下载慢的终极指南
  • ReactList 源码解析:深入理解无限滚动算法的实现原理
  • jupyterlab-vim核心功能解析:从模式切换到高效单元格操作