hw-native-sys/pto-isa/pto-isa-operator-implementation
Claude Code and agent skill by hw-native-sys/pto-isa
- community
Checking that the SKILL.md file is still in the repository.
使用PTO-ISA实现指定算子功能的完整流程指南,涵盖ISA指令选择、数据流分析、指令功能解释和kernel代码生成
Install
npx vskill@latest install hw-native-sys/pto-isa/pto-isa-operator-implementationSKILL.md
PTO-ISA算子实现指南
本指南为使用PTO-ISA实现指定算子功能提供完整的流程指导。
目录
概述
本skill专门用于帮助开发者从PTO-ISA指令集中选择合适的指令来实现指定的算子功能,并生成完整的kernel代码。
适用场景
- 用户指定具体的算子功能需求(如: "实现GELU激活函数"、"实现Batch Normalization")
- 需要分析PTO-ISA指令集并选择合适的指令组合
- 需要理解数据在硬件上的流动过程
- 需要生成可直接使用的kernel代码
关键特性
- ISA指令选择: 从PTOISA_zh.md文档中分析并选择合适的指令
- 数据流分析: 按数据处理顺序分析数据流向
- Vector计算: gm → ub → vector → ub → gm
- Cube计算(矩阵乘): GM → L1 → L0A/L0B → L0C → GM
- 指令功能解释: 详细解释每个ISA指令在算子实现中的作用
- 代码生成: 输出完整的kernel代码实现
工作流程
当用户指定算子功能后,遵循以下工作流程:
步骤详解
步骤1: 阅读PTOISA_zh.md文档
目标: 全面了解PTO-ISA指令集,识别可能与算子相关的指令类别。
行动:
- 阅读文档路径:
pto-isa/docs/PTOISA_zh.md - 重点关注指令索引表,识别以下类别的指令:
- 内存指令: TLOAD, TSTORE, TPREFETCH (GM <-> Tile数据搬运)
- 逐元素计算: TADD, TSUB, TMUL, TDIV, TMAX, TMIN (Tile-Tile操作)
- 标量操作: TADDS, TSUBS, TMULS, TDIVS (Tile-标量操作)
- 数学函数: TLOG, TEXP, TSQRT, TRSQRT, TPOW (数学运算)
- 激活函数: TRELU, TPRELU, TLRELU (激活操作)
- 轴归约/扩展: TROWSUM, TCOLSUM, TROWMAX, TCOLMAX (轴操作)
- 广播操作: TROWEXPANDADD, TCOLEXPANDADD (广播加法)
- 类型转换: TCVT (类型转换)
- 选择操作: TSEL, TSELS (条件选择)
- 矩阵操作: TMATMUL, TGEMV (矩阵计算)
- 记录每个相关指令的:
- 指令名称
- 功能描述
- 所属类别
- 适用场景
输出: 相关ISA指令列表
步骤2: 整理并列举需要使用的ISA指令
目标: 根据算子功能需求,确定具体的ISA指令组合。
分析框架:
2.1 算子功能分解
将算子功能分解为基本操作:
| 算子类型 | 分解步骤 | 典型指令 | |
|---|---|---|---|
| 激活函数 | 输入加载 + 计算 + 输出存储 | TLOAD + TEXP/TLOG/TRELU + TSTORE | |
| 归约操作 | 输入加载 + 归约 + 输出存储 | TLOAD + TROWSUM/TCOLSUM + TSTORE | |
| 逐元素运算 | 输入加载 + 运算 + 输出存储 | TLOAD + TADD/TSUB/TMUL/TDIV + TSTORE | |
| 广播操作 | 输入加载 + 广播 + 运算 + 存储 | TLOAD + TROWEXPANDADD + TSTORE | |
| 矩阵运算(Cube) | 输入加载 + 数据搬运 + 矩阵乘 + 输出存储 | TLOAD + TMOV + TMATMUL + TSTORE (GM→L1→L0A/L0B→L0C→GM) | |
| 类型转换 | 输入加载 + 转换 + 输出存储 | TLOAD + TCVT + TSTORE | |
| 条件运算 | 输入加载 + 比较 + 选择 + 存储 | TLOAD + TCMP + TSEL + TSTORE |
2.2 ISA指令选择原则
最小化原则: 使用最少的指令完成功能,减少数据搬运。
数据流优化:
- Vector计算: 遵循 gm → ub → vector → ub → gm 的基本数据流
- Cube计算(矩阵乘): 遵循 GM → L1 → L0A/L0B → L0C → GM 的矩阵数据流
同步考虑: 指令间使用Event同步或手动标志同步。
示例:
输出: 按执行顺序排列的ISA指令列表
步骤3: 按数据处理顺序详细解释指令功能
目标: 详细说明每个指令在数据流中的作用。
数据流框架:
Vector计算数据流
Cube计算数据流 (矩阵乘)
关键区别:
- Vector计算: 使用UB(Unified Buffer)作为中间缓冲区,执行逐元素操作
- Cube计算: 使用L1和L0缓冲区(L0A/L0B/L0C),执行矩阵乘法操作
3.1 指令功能解释模板
对每个指令,按以下模板解释:
3.2 阶段详解
阶段1: GM → UB (数据加载)
阶段2/3: Vector计算 (核心计算)
根据具体算子,选择相应的计算指令:
Cube计算阶段: 矩阵乘法 (GM → L1 → L0A/L0B → L0C → GM)
阶段5: UB → GM (数据存储)
输出: 按数据流顺序的完整指令功能解释文档
步骤4: 输出kernel代码实现
目标: 生成完整的、可运行的kernel代码。
代码结构:
代码生成要点:
- 命名规范: kernel文件命名为
t<操作指令>_kernel.cpp - 模板参数: T (数据类型), kTRows_, kTCols_ (Tile维度), vRows, vCols (有效数据维度)
- 类型转换: aclFloat16需要转换为half类型
- 缓冲区分配: 使用TASSIGN紧密排布Tile地址
- 同步策略: 推荐使用Event同步,备选手动标志同步
- 模板实例化: 为常用配置提供实例化
输出: 完整的kernel代码文件
ISA指令分类参考
内存指令 (GM <-> Tile)
| 指令 | 功能 | 数据流 | 适用场景 | |
|---|---|---|---|---|
| TLOAD | GM → UB/L1 | GlobalMemory → UnifiedBuffer/L1Buffer | Vector和Cube计算 | |
| TSTORE | UB/L0C → GM | UnifiedBuffer/L0Buffer → GlobalMemory | Vector和Cube计算 | |
| TPREFETCH | 预取到UB缓存 | 提示性预取 | Vector计算优化 | |
| MGATHER | 索引收集加载 | GM[索引] → UB | Vector计算 | |
| MSCATTER | 索引散播存储 | UB → GM[索引] | Vector计算 |
注意:
- TLOAD可以加载到UB (Vector计算) 或L1Buffer (Cube计算)
- TSTORE可以存储UB (Vector计算) 或L0C (Cube计算) 的数据
逐元素计算指令 (Tile-Tile)
| 指令 | 功能 | 表达式 | ||
|---|---|---|---|---|
| TADD | 逐元素加法 | dst = src0 + src1 | ||
| TSUB | 逐元素减法 | dst = src0 - src1 | ||
| TMUL | 逐元素乘法 | dst = src0 * src1 | ||
| TDIV | 逐元素除法 | dst = src0 / src1 | ||
| TMAX | 逐元素最大值 | dst = max(src0, src1) | ||
| TMIN | 逐元素最小值 | dst = min(src0, src1) | ||
| TCMP | 比较(生成掩码) | predicate = cmp(src0, src1) | ||
| TSHL | 逐元素左移 | dst = src0 << src1 | ||
| TSHR | 逐元素右移 | dst = src0 >> src1 | ||
| TAND | 逐元素按位与 | dst = src0 & src1 | ||
| TOR | 逐元素按位或 | dst = src0 | src1 | |
| TXOR | 逐元素按位异或 | dst = src0 ^ src1 | ||
| TNOT | 逐元素按位取反 | dst = ~src |
标量操作指令 (Tile-标量)
| 指令 | 功能 | 表达式 | |
|---|---|---|---|
| TADDS | Tile加标量 | dst = src + scalar | |
| TSUBS | Tile减标量 | dst = src - scalar | |
| TMULS | Tile乘标量 | dst = src * scalar | |
| TDIVS | Tile除标量 | dst = src / scalar | |
| TMINS | Tile与标量最小值 | dst = min(src, scalar) | |
| TMAXS | Tile与标量最大值 | dst = max(src, scalar) | |
| TCMPS | Tile与标量比较 | predicate = cmp(src, scalar) | |
| TEXPANDS | 标量广播到Tile | dst = broadcast(scalar) |
数学函数指令
| 指令 | 功能 | 表达式 | |
|---|---|---|---|
| TLOG | 自然对数 | dst = log(src) | |
| TEXP | 指数运算 | dst = exp(src) | |
| TSQRT | 平方根 | dst = sqrt(src) | |
| TRSQRT | 倒数平方根 | dst = 1/sqrt(src) | |
| TPOW | 幂运算 | dst = src0 ^ src1 | |
| TRECIP | 倒数 | dst = 1/src | |
| TABS | 绝对值 | dst = abs(src) | |
| TNEG | 取负 | dst = -src |
激活函数指令
| 指令 | 功能 | 表达式 | |
|---|---|---|---|
| TRELU | ReLU | dst = max(0, src) | |
| TPRELU | PReLU | dst = max(0, src) + slope * min(0, src) | |
| TLRELU | Leaky ReLU (标量斜率) | dst = max(0, src) + scalar * min(0, src) |
轴归约/扩展指令
| 指令 | 功能 | 操作 | |
|---|---|---|---|
| TROWSUM | 行求和 | 每行所有列求和 | |
| TROWPROD | 行乘积 | 每行所有列乘积 | |
| TROWMAX | 行最大值 | 每行所有列最大值 | |
| TROWMIN | 行最小值 | 每行所有列最小值 | |
| TROWARGMAX | 行argmax | 每行最大值列索引 | |
| TROWARGMIN | 行argmin | 每行最小值列索引 | |
| TCOLSUM | 列求和 | 每列所有行求和 | |
| TCOLPROD | 列乘积 | 每列所有行乘积 | |
| TCOLMAX | 列最大值 | 每列所有行最大值 | |
| TCOLMIN | 列最小值 | 每列所有行最小值 | |
| TCOLARGMAX | 列argmax | 每列最大值行索引 | |
| TCOLARGMIN | 列argmin | 每列最小值行索引 | |
| TROWEXPAND | 行广播 | 将行首元素广播到整行 | |
| TCOLEXPAND | 列广播 | 将列首元素广播到整列 |
广播运算指令
| 指令 | 功能 | 操作 | |
|---|---|---|---|
| TROWEXPANDADD | 行广播加法 | 每行 + 广播标量向量 | |
| TROWEXPANDSUB | 行广播减法 | 每行 - 广播标量向量 | |
| TROWEXPANDMUL | 行广播乘法 | 每行 * 广播标量向量 | |
| TROWEXPANDDIV | 行广播除法 | 每行 / 广播标量向量 | |
| TROWEXPANDMAX | 行广播最大值 | max(每行, 广播标量向量) | |
| TROWEXPANDMIN | 行广播最小值 | min(每行, 广播标量向量) | |
| TROWEXPANDEXPDIF | 行指数差 | exp(每行 - 广播标量向量) | |
| TCOLEXPANDADD | 列广播加法 | 每列 + 广播标量向量 | |
| TCOLEXPANDSUB | 列广播减法 | 每列 - 广播标量向量 | |
| TCOLEXPANDMUL | 列广播乘法 | 每列 * 广播标量向量 | |
| TCOLEXPANDDIV | 列广播除法 | 每列 / 广播标量向量 | |
| TCOLEXPANDMAX | 列广播最大值 | max(每列, 广播标量向量) | |
| TCOLEXPANDMIN | 列广播最小值 | min(每列, 广播标量向量) | |
| TCOLEXPANDEXPDIF | 列指数差 | exp(每列 - 广播标量向量) |
数据搬运指令 (缓冲区数据移动)
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagents/skills/pto-isa-operator-implementation/SKILL.md
Popularity
- Repository stars
- 58
- Repository forks
- 40
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/hw-native-sys/pto-isa/pto-isa-operator-implementation)