SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/mindspore-ai/akg --skill designer-agentコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
矩阵乘法矩阵乘法 A[M, K] @ B[K, N] = C[M, N]中,大K维度矩阵乘法(K>>M,N)优化:针对M/N较小但K极大(如M=N=256,K=131072)的场景,Split-K切分K维度并行化、Workspace+Reduce替代全局同步,实现显著性能提升
Triton Ascend hard API restrictions and forbidden syntax. MUST-follow rules that apply to every kernel: forbidden control flow (return/break/continue/lambda/while), tensor slice/index restrictions, scalar conversion rules, BLOCK_SIZE upper bound. Violating any of these produces a compile or runtime error on Ascend.
Triton Ascend 性能优化通用策略: BLOCK_SIZE 选择 (1024-2048 for elementwise, must be <65536), grid configuration (use VEC_CORE_NUM / CUBE_CORE_NUM, 2D/3D grid for matmul / conv / reduce, 1D grid + inner loop for elementwise / pointwise), 256B alignment for memory transfers, autotune block-size patterns, fp16 / fp32 precision conversion. Bind via keywords like matmul, elementwise, reduce, block_size, grid, autotune, alignment, fp16, fp32, tile, interleaved-loop, cube-core, vec-core.
| name | designer-agent |
| description | 算法设计Agent,负责生成算子设计方案和优化策略 |
| category | agent |
| version | 1.0.0 |
| license | MIT |
Designer Agent负责算法层面的设计,在代码生成之前提供:
根据算子需求分析:
输出包含:
在进化算法中生成多个设计变种:
输入: 算子规格 + 性能要求 + 硬件约束
↓
步骤1: 分析算子特征
├─ 计算密集 vs 访存密集
├─ 规则 vs 不规则
└─ 独立 vs 依赖
↓
步骤2: 生成设计方案
├─ 选择合适的算法模式
├─ 确定分块策略
└─ 规划内存使用
↓
步骤3: 输出设计文档
├─ 伪代码
├─ 数据流图
└─ 优化建议
↓
输出: 设计Sketch → 交给Coder实现
适用于逐元素操作(ReLU, Sigmoid, 加法等):
Design Pattern: Element-wise
- 并行化:每个线程处理一个或多个元素
- 内存:简单的顺序访问
- 优化:向量化加载,循环展开
Pseudocode:
for each element in parallel:
output[i] = f(input[i])
适用于规约操作(Sum, Max, Min等):
Design Pattern: Reduction
- 并行化:树状规约
- 内存:先local规约,再global规约
- 优化:使用shared memory,warp shuffle
Pseudocode:
Step 1: Local reduction (per block)
shared_mem[tid] = local_sum
for offset in [N/2, N/4, ..., 1]:
shared_mem[tid] += shared_mem[tid + offset]
Step 2: Global reduction
global_sum = atomicAdd(shared_mem[0])
Design Pattern: Tiled Matrix Multiplication
- 并行化:2D分块,每个block计算一个tile
- 内存:使用shared memory缓存tiles
- 优化:避免bank conflict,使用tensor cores
Pseudocode:
for each block (bx, by):
for tile_k in [0, K, TILE_SIZE]:
Load A[bx, tile_k] to shared_A
Load B[tile_k, by] to shared_B
sync()
Compute C_tile += shared_A @ shared_B
sync()
Write C_tile to C[bx, by]
适用于需要相邻元素的操作(卷积、滤波等):
Design Pattern: Stencil with Halo
- 并行化:每个block处理一个区域+halo
- 内存:加载halo到shared memory
- 优化:重用shared memory数据
Pseudocode:
Load tile with halo to shared_mem
sync()
for each element in tile:
result = 0
for each neighbor in stencil:
result += shared_mem[neighbor] * weight
output[i] = result
MatMul设计
├─ 矩阵尺寸?
│ ├─ 小矩阵 (< 1024) → 简单实现,不分块
│ └─ 大矩阵 → 分块实现
│ ├─ 分块大小?
│ │ ├─ 32x32 (小,低occupancy)
│ │ ├─ 64x64 (中,平衡)
│ │ └─ 128x128 (大,高性能)
│ └─ 使用Tensor Cores?
│ ├─ 是 → wmma API (FP16/BF16)
│ └─ 否 → FMA指令 (FP32)
├─ 内存布局?
│ ├─ Row-major → 标准实现
│ └─ Col-major → 转置处理
└─ 稀疏性?
├─ 密集 → 标准算法
└─ 稀疏 → CSR/COO格式
def estimate_performance(design):
"""估算设计的理论性能"""
# 计算FLOP数
flops = design.compute_operations()
# 计算内存访问量
bytes = design.memory_access()
# 算术强度
arithmetic_intensity = flops / bytes
# 理论性能
peak_flops = get_device_peak_flops()
peak_bandwidth = get_device_peak_bandwidth()
# Roofline
compute_bound_perf = peak_flops
memory_bound_perf = peak_bandwidth * arithmetic_intensity
estimated_perf = min(compute_bound_perf, memory_bound_perf)
return {
'flops': flops,
'bytes': bytes,
'arithmetic_intensity': arithmetic_intensity,
'estimated_gflops': estimated_perf / 1e9,
'bottleneck': 'compute' if compute_bound_perf < memory_bound_perf else 'memory'
}
# 算子设计: [算子名称]
## 1. 问题分析
- 输入:[形状,类型]
- 输出:[形状,类型]
- 计算:[描述]
- 复杂度:O(?)
## 2. 算法选择
- 模式:[Element-wise / Reduction / MatMul / Stencil / Custom]
- 理由:[为什么选择这个模式]
## 3. 并行化策略
- Grid dimension: [配置]
- Block dimension: [配置]
- 每个线程处理: [工作量]
## 4. 内存策略
- Global memory: [访问模式]
- Shared memory: [使用方案]
- Registers: [估算]
## 5. 优化策略
- [ ] 合并内存访问
- [ ] 使用shared memory
- [ ] 循环展开
- [ ] Warp-level优化
- [ ] Tensor Core使用
## 6. 伪代码
[详细的伪代码]
## 7. 性能估算
- FLOPS: [估算]
- Bandwidth: [估算]
- 瓶颈: [Compute/Memory]
- 预期性能: [GFLOPS]
## 8. 风险与挑战
- [可能的问题]
- [缓解措施]
def mutate_design(parent_design, mutation_rate=0.3):
"""生成设计变种"""
child_design = copy.deepcopy(parent_design)
if random.random() < mutation_rate:
# 变异1: 改变block size
child_design.block_size = random.choice([128, 256, 512, 1024])
if random.random() < mutation_rate:
# 变异2: 改变tile size
child_design.tile_size = random.choice([16, 32, 64, 128])
if random.random() < mutation_rate:
# 变异3: 改变计算顺序
child_design.loop_order = random_permutation(['i', 'j', 'k'])
return child_design
def crossover_designs(parent1, parent2):
"""交叉两个设计"""
child = Design()
# 从parent1继承block配置
child.block_size = parent1.block_size
child.grid_size = parent1.grid_size
# 从parent2继承内存策略
child.tile_size = parent2.tile_size
child.shared_mem_layout = parent2.shared_mem_layout
return child
算子: Flash Attention
分析:
- Attention计算: O(N^2) 复杂度
- 瓶颈: 内存访问(需读写大矩阵多次)
设计方案:
1. 分块计算(Tiling)
- 将Q, K, V分成blocks
- 每个block独立计算attention
2. 在线Softmax
- 避免存储完整的attention matrix
- 使用online算法累积softmax
3. 重计算策略
- Forward不存储attention matrix
- Backward时重新计算
优化:
- Shared memory存储tiles
- Fused kernel减少访存
- 使用Tensor Cores加速矩阵乘法
结果:
- 内存使用: O(N) vs 标准O(N^2)
- 速度: 2-4x加速
算子: Sparse Matrix Multiplication
分析:
- 输入: 稀疏矩阵(CSR格式)+ 密集矩阵
- 挑战: 不规则内存访问,负载不均衡
设计方案:
1. 行并行策略
- 每个warp处理一行
- 使用warp-level reduction
2. 负载均衡
- 动态任务分配
- 长行拆分到多个warps
3. 内存优化
- Prefetch稀疏矩阵索引
- Cache密集矩阵的列
优化:
- Warp shuffle通信
- Vector load (float4)
- Early exit for empty rows
结果:
- vs 密集实现: 5-10x加速(高稀疏度)
- vs cuSPARSE: 持平或略优
# Designer生成设计
design = designer.generate_design(
operator_spec="matmul",
shape=(1024, 1024, 1024),
target_device="A100"
)
# Coder实现设计
code = coder.implement_design(
design=design,
dsl="triton",
optimization_level=2
)
# 如果性能不达标,Designer调整设计
if performance < target:
design = designer.refine_design(
original_design=design,
profiling_results=profile_data
)