ワンクリックで
catlass-hardware-constraints
CATLASS TileShape 与 on-chip 缓存容量约束:L1/L0A/L0B/L0C 预算公式、fp16/fp32 Pingpong 双缓冲、512B 对齐与排布对 Tile 选型的影响。调参前必读。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
CATLASS TileShape 与 on-chip 缓存容量约束:L1/L0A/L0B/L0C 预算公式、fp16/fp32 Pingpong 双缓冲、512B 对齐与排布对 Tile 选型的影响。调参前必读。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
AscendC direct-invoke 崩溃/挂起修复索引:Kernel timeout、hang、Segmentation Fault、aic error、buffer 死锁、plog/memcheck 调试。
AscendC direct-invoke 精度失败修复索引:输出全 0/随机值、DataCopy 对齐、EnQue/DeQue 同步、FP16/FP32 精度、Cast RoundMode、DumpTensor 分段定位。
AscendC direct-invoke 工程契约:WA 使用 kernel.py + ascendc_op/,ModelNew 调用 torch.ops.npu.*,adapter 负责复制工程、CMake 构建和 npu-arch patch。适用于 dsl=ascendc 的 autoresearch 任务。
把注册式 AscendC 算子迁移为 direct-invoke 工程的保真原则:kernel 算法和 tiling 公式不乱改,只替换注册框架胶水、入口 ABI、host launch 与 PyTorch extension。
CATLASS Gemm 性能调优:DispatchPolicy、Tile 与分核负载均衡、Swizzle、何时用 padding/Split-K/Preload。面向 AR 修改 catlass_kernel.asc 中的类型别名。
CPU C++ 算子核心概念、标准结构模式、KernelBench 代码规范和内嵌扩展方法
| name | catlass-hardware-constraints |
| description | CATLASS TileShape 与 on-chip 缓存容量约束:L1/L0A/L0B/L0C 预算公式、fp16/fp32 Pingpong 双缓冲、512B 对齐与排布对 Tile 选型的影响。调参前必读。 |
| category | fundamental |
| version | 1.0.0 |
| metadata | {"backend":"ascend","dsl":"ascendc_catlass","hardware":"Atlas A2, Atlas A3, Atlas A5","operator_patterns":"matmul, conv"} |
改 L1TileShape / L0TileShape 前,先算缓冲区是否超限;编译期 static_assert 失败多半是该问题。
| 缓冲 | 容量 | 用途 |
|---|---|---|
| L1 | 512 KB | A/B tile 双缓冲 |
| L0A | 64 KB | A tile 双缓冲 |
| L0B | 64 KB | B tile 双缓冲 |
| L0C | 128 KB | C 累加(fp32 累加时按 4 字节/元素) |
Atlas A5 等代际容量可能不同,以当前 ArchTag 与仓内文档为准;不要把 A2 公式硬套到未验证的架构。
记 L1 = (m1, n1, k1),L0 = (m0, n0, k0),元素类型宽 es(fp16 为 2),累加宽 ac(fp32 为 4),双缓冲乘 2:
L1 元素量: m1*k1 + n1*k1 (乘 es*2 得字节,须 ≤ 512KB)
L0A 元素量: m0*k0 (× es*2 ≤ 64KB)
L0B 元素量: k0*n0 (× es*2 ≤ 64KB)
L0C 元素量: m0*n0 (× ac ≤ 128KB,fp32 累加)
示例(仅说明算法):L1=(128,256,256)、L0=(128,256,64)、fp16、Pingpong
→ L1 字节约 128*256*4 + 256*256*4,需逐项代入验证是否低于 512KB。
L1 上 A/B 常按 4 字节计;L0C 仍可能按 fp32 累加。fp32 场景往往要把 k1 或 m1/n1 压低,否则 L1 先触顶。
m0=m1、n0=n1,k0≤k1;k0 = k1/4 是常见起点,不是唯一解。k1 前都要重算 L1;k1 小于问题 K 时,外层 K 循环次数会增加。| A | B | L1 起点(需验算) | 说明 |
|---|---|---|---|
| RowMajor | RowMajor | (128, 256, 256) | 通用 |
| RowMajor | ColumnMajor | (128, 256, 256) | N 连续搬运友好 |
| ColumnMajor | ColumnMajor | (256, 128, 256) | M 方向优先 |