目录

metaxRace — MetaX C500 GPU 高性能 Kernel 优化项目

MetaX C500 GPU 上的 CUDA / TileLang 高性能计算 Kernel 仓库。 聚焦 DeepSeek 风格 MoE (Mixture of Experts)FlashMLANative Sparse Attention (NSA) 等核心算子的 TileLang kernel 实现与性能优化。 配套 mcProfiler 性能分析工具链与 mxmaca-performance-tuning-guide 性能优化指南。


目录


1. 项目概览

1.1 目标

本仓库的核心目标是在 MetaX(沐曦)C500 GPU 上,使用 TileLangCUDA 编写并优化大语言模型推理中的关键计算 Kernel,包括:

  • **MoE (Mixture of Experts)**:DeepSeek 风格的分组 Fused MoE 前向 Kernel
  • FlashMLA:Multi-head Latent Attention 的 FlashAttention 风格实现
  • **NSA (Native Sparse Attention)**:原生稀疏注意力机制

1.2 技术栈

组件 版本 / 说明
GPU MetaX C500(曦云)
MACA SDK 3.7.1.5(沐曦 CUDA 兼容层)
Driver 3.8.30
TileLang 0.1.10(基于 Apache TVM 的 Tile DSL)
PyTorch 2.8.0+metax
mcProfiler 3.8.1.4(性能分析工具)
mxcc MACA C/C++ 编译器

1.3 学习路线

推荐阅读顺序(对 C500 高性能 Kernel 开发者):

  1. mcoplib — 沐曦工程师的实际 CUDA kernel 实现(最直接的写码参考)
  2. vLLM-metax/csrc — vLLM 适配 C500 的引擎层代码
  3. FlashMLA — MLA 算子的 TileLang + CUDA 实现
  4. TileKernels-Metax — TileLang kernel 集合
  5. race_tests/ — 竞赛测试用例(MoE / MLA / NSA TileLang 实现)
  6. mxmaca-performance-tuning-guide/ — 性能优化指南(含 microbenchmark)

2. 硬件平台:MetaX C500 架构

2.1 MetaX ↔ NVIDIA ↔ AMD 术语对照

MetaX NVIDIA AMD 含义
DPC (Data Process Cluster) GPC Shader Engine 顶层计算集群,8 个,每 DPC 含 13 个 AP
AP (Accelerator Processor) SM CU 执行 thread block 的主要计算单元,共 104 个
PEU SM sub-partition SIMD Lane AP 内的执行单元,4 个/AP,共 416 个
Wave / Wavefront Warp Wavefront 调度执行的基本单位,64 线程(CUDA 为 32)
WSM Shared Memory LDS 64 KiB/AP,由 4 个 PEU 共享
MMA Tensor Core Matrix Core 矩阵乘加单元
MTE Load/Store 单元 Load/Store Unit 数据搬运单元
STE Scalar 单元 Scalar Unit 标量执行单元

2.2 硬件层次结构

GPU
 └─ 8 × DPC
     └─ 每个 DPC 包含 13 × AP
         ├─ Wave 调度器(4 组,对应 4 个 PEU)
         ├─ MMA 矩阵计算单元
         ├─ MTE 数据搬运单元
         ├─ STE 标量执行单元
         └─ 存储层次:
             ├─ 向量寄存器堆:512 KiB/AP(2048 × 32-bit/lane)
             ├─ 标量寄存器堆:800 × 32-bit/AP
             ├─ WSM (Shared Memory):64 KiB/AP
             ├─ VL1 (Vector L1 Cache):32 KiB/AP(默认关闭)
             ├─ L2 Cache:8 MB(全芯片共享)
             └─ 全局内存 (DRAM):64 GB,峰值带宽 1843 GB/s

2.3 C500 关键参数速记

参数
AP 数量 104 (8 DPC × 13 AP)
PEU 数量 416 (4 PEU/AP)
Wavefront 大小 64 线程
WSM 容量 64 KiB/AP
每 AP 最大 wave 数 32 (2048 线程)
每 AP 最大 block 数 32
每 block 最大线程数 1024
每线程最大向量寄存器 256 × 32-bit
VL1 容量 32 KiB/AP(默认关闭)
L2 容量 8 MB
DRAM 峰值带宽 1843 GB/s
Shared Memory 带宽 128 B/cycle/AP
Shared Memory 延迟 ~64 cycles
L2 延迟 ~170 cycles
DRAM 延迟 ~420 cycles
FP16×FP16→FP32 MMA 粒度 Wave-level M16×N16×K16

2.4 存储层次与数据局部性

C500 的存储子系统采用三层架构,类似认知科学的三层记忆模型:

工作记忆区(寄存器堆)
    ↕ 全双工
短期记忆区(WSM / VL1 / L2 Cache)
    ↕ 半双工
长期记忆区(DRAM 全局内存)

关键特性

  • 全双工通路:L2↔VL1、VL1↔寄存器、WSM↔寄存器之间可同时双向传输
  • 半双工通路:DRAM↔L2 一个时刻只能单向传输
  • VL1 默认关闭:C500 某些默认配置关闭 VL1,低 hit rate 不能单独证明 locality 差
  • Coalescing 模型:64 线程 wave → 4 个 16 线程合并组 → 地址聚合为 128B 对齐的 transaction

2.5 指令发射单元

每周期最多发射 5 条指令(来自不同 warp):

  1. 1 条标量 ALU 或标量访存(STE/LDU)
  2. 1 条 MMA 矩阵指令或向量 ALU 计算指令(MTE)
  3. 1 条向量全局访存指令(Global Load/Store/Atomics)
  4. 1 条共享内存访存指令(BSM)
  5. 1 条 MISC 指令(BRA 等)

3. 项目结构

/data/metaxRace/
├── README.md                          ← 本文档
├── init_tilelang.sh                   ← TileLang 安装/注册脚本
├── skills/                            ← 技能目录
│   ├── install_skills.sh
│   └── mcprof-report-skill/           ← mcProfiler 报告分析技能
│       ├── SKILL.md
│       ├── metax-kernel-guide.md      ← C500 Kernel 开发指南
│       └── tests/conformance/         ← 一致性测试
├── doc/                               ← 文档目录
│   ├── record.md                      ← 术语对照与架构速查
│   ├── metax_c500_arch.md             ← C500 架构说明
│   ├── image.png
│   ├── GPU扫盲/
│   │   └── gemm.md                    ← GEMM Tile 切分基础
│   ├── problem_description/           ← OJ 题目描述
│   │   ├── oj_requirement.md          ← 评测系统规范(CUDA/Triton/TileLang)
│   │   └── moe.md                     ← MoE 题目描述
│   ├── mxmaca-performance-tuning-guide/ ← 性能优化指南
│   │   ├── README.md
│   │   ├── guide/                     ← 10 章优化文档
│   │   │   ├── ch1.初探异构编程.vectoradd.md
│   │   │   ├── ch2.曦云C500芯片架构.md
│   │   │   ├── ch3.Kernel编程入门.reduction.md
│   │   │   ├── ch4.Kernel性能建模.sgemm.md
│   │   │   ├── ch5.Kernel性能优化技巧.md
│   │   │   ├── ch6.Kernel性能分析工具.md
│   │   │   ├── ch7.Host代码性能优化.md
│   │   │   ├── ch8.张量编程.hgemm.md
│   │   │   ├── ch9.C500_HW_limitation.md
│   │   │   └── ch10.常用Compiler参数和Driver环境变量.md
│   │   ├── case/                      ← 文档对应示例代码
│   │   │   ├── 1.vector_add/          ← 向量加法
│   │   │   ├── 2.reduction/           ← 归约
│   │   │   ├── 3.sgemv/               ← 矩阵-向量乘
│   │   │   └── 4.sgemm_tt/            ← 矩阵乘法 (18 个版本)
│   │   ├── microbenchmark/            ← 微架构参数测试
│   │   └── requirements.txt
│   ├── kernel-optimize/               ← Kernel 优化笔记
│   │   └── moe/
│   │       ├── moe.md                 ← MoE Kernel 全面优化记录
│   │       ├── analyze.md             ← 流水线与卡顿分析
│   │       ├── plan.md                ← 优化计划
│   │       ├── case.md                ← 案例研究
│   │       ├── fused.md               ← 融合分析
│   │       ├── kernel.md              ← Kernel 细节
│   │       ├── analyze-data-reuse.md  ← 数据复用分析
│   │       ├── optimize.md            ← 优化分析整理版
│   │       └── optimize/
│   │           ├── HANDOFF.md
│   │           ├── bsm_instruction_num.md
│   │           ├── plan.md
│   │           ├── state.md
│   │           └── tl_thread.md
│   └── skill/
│       └── review.md                  ← 代码评审指南
├── example/                           ← 参考实现
│   ├── README.md                      ← 学习路线指南
│   ├── FlashMLA/                      ← FlashMLA 参考实现
│   │   ├── README.md
│   │   ├── setup.py
│   │   ├── flash_mla/
│   │   ├── csrc/                      ← CUDA 源码
│   │   └── tests/
│   ├── mcoplib/                       ← 沐曦算子库源码
│   │   ├── README.md
│   │   ├── kernel/                    ← CUDA kernel
│   │   ├── op/                        ← 算子实现 (CUDA)
│   │   └── benchmark/                 ← 性能测试
│   │       ├── config/                ← 130 个算子 benchmark 配置
│   │       └── runners/               ← 131 个 benchmark runner
│   ├── kernels/                       ← 各种 kernel 参考
│   │   ├── FlashMLA/                  ← FlashMLA 参考
│   │   ├── TileKernels-Metax/         ← TileLang kernel 集
│   │   ├── TileOPs-Metax/             ← TileLang ops
│   │   ├── mcoplib/                   ← mcoplib 符号链接
│   │   └── vLLM-metax/                ← vLLM 适配代码
│   └── mcoplib/                       ← 沐曦官方算子库(完整版)
│       ├── CMakeLists.txt
│       ├── setup.py / pyproject.toml
│       ├── include/                   ← 头文件
│       ├── kernel/                    ← CUDA kernel (14 个文件)
│       ├── op/                        ← 算子入口 (31 个 CUDA 文件)
│       ├── benchmark/                 ← 性能测试框架
│       └── unit_test/
├── race_tests/                        ← 竞赛测试用例
│   ├── moe/                           ← MoE Fused Kernel
│   │   ├── README.md                  ← 使用说明
│   │   ├── doc.md                     ← 算法拆解
│   │   ├── custom_fusedmoe.py         ← TileLang kernel(主入口)
│   │   ├── ref_fusedmoe.py            ← PyTorch 参考实现
│   │   ├── fusedmoe_benchmark.py      ← host 侧编排
│   │   ├── moe_test_configs.json      ← 测试配置
│   │   ├── moe_prof_driver.py         ← Profiling 被测进程
│   │   ├── profile_mcprof.sh          ← 一键 profiling 脚本
│   │   ├── mcprof_summary.py          ← Profiler 报告摘要解析
│   │   ├── run.sh / run_min.sh        ← 运行脚本
│   │   └── submission*/               ← 各版本提交
│   ├── mla/                           ← Multi-head Latent Attention
│   │   ├── test_tilelang_mla.py       ← TileLang MLA Kernel
│   │   └── test_cases_mla_batch_ctx.json
│   └── nsa/                           ← Native Sparse Attention
│       ├── test_tilelang_nsa_fwd.py   ← TileLang NSA Kernel
│       ├── test_cases_nsa_fwd.json
│       └── reference.py               ← PyTorch 参考实现

4. OJ 提交评测系统

4.1 评测流程

OJ 平台支持三种语言提交:CUDA(C/C++ 源码)、TritonTileLang

单测试点执行步骤:

  1. 生成测试数据:按题目规格生成多组随机张量
  2. 预热:连续执行若干次(不计时),稳定 JIT/缓存/调度
  3. 测速:连续执行若干次,GPU 端 cupti 测时取平均
  4. 校验:输出与 PyTorch baseline allclose 对比
  5. 基线计时:跑一次 PyTorch baseline

4.2 评分公式

S(Tk)=1001+(1s1)TkThTbThS(T_k)=\dfrac{100}{1+\left(\dfrac{1}{s}-1\right)\dfrac{T_k-T_h}{T_b-T_h}}

  • s=0.5s = 0.5:PyTorch baseline 对应 50 分
  • ThT_h:基于 FLOPs 与带宽估算的理论下限
  • TbT_b:PyTorch baseline 平均时间
  • S>100S > 100 时按对数压缩展示,上限 150 分

4.3 TileLang 提交规范

  • 入口函数必须为 run_kernel(无装饰器,按 run_kernel(*args) 调用)
  • 允许的根包:torchtilelang(含 tilelang.languagetilelang.intrinsics)、math
  • 内核装饰器:@tilelang.jit 包装 + @T.prim_func 内层
  • 参数注解:T.Tensor((M, K), T.float16)T.Tensor[(M, K), T.float16]
  • 禁用:ossyssubprocesssocketpickleexec/eval/compile
  • PyTorch 接口白名单制,不在白名单的调 TorchProxyError

5. MoE Kernel:核心攻关项目

5.1 题目描述

实现 DeepSeek 风格 MoE 中的 pre-routed fused expert GEMM。

计算链条

for each expert e:
    gate_logits = stacked_expert_tokens @ gate_w[e]^T    [d_hidden → d_expert]
    up_logits   = stacked_expert_tokens @ up_w[e]^T      [d_hidden → d_expert]
    hidden      = SiLU(gate_logits) * up_logits           [d_expert]
    output      = hidden @ down_w[e]^T                    [d_expert → d_hidden]
    output     *= routed_expert_weights                   [逐行缩放]

5.2 测试用例

ID n_experts d_hidden d_expert group_sum padded/M warmup/iters
cfg0 16 2048 8192 2272 3072/24 5/30
cfg1 32 7168 2048 4544 6144/48 5/20
cfg2 64 7168 2048 9088 12288/96 5/20

重要routed_expert_weightstorch.float32(非 float16),需在 TileLang kernel 中单独声明 dtype。

5.3 两阶段 Kernel 结构

设计上采用 2 次 launch(相对朴素 5 次 launch 的融合):

Stage 1:gate/up 双 GEMM + SiLU 融合

grid: (M, ceil(d_expert/128))
K 维 = d_hidden, T.Pipelined 循环
每轮: 读 input[128,128] + gate_w[128,128] + up_w[128,128]
      两次 T.gemm, fp32 累加
Epilogue: SiLU(gate) * up → 写回 up_logits

Stage 2:down GEMM + 权重缩放融合

grid: (M, ceil(d_hidden/128))
K 维 = d_expert, T.Pipelined 循环
每轮: 读 up_logits[128,128] + down_w[128,128]
Epilogue: output *= routed_expert_weights[m]

5.4 当前最优参数

参数 说明
block_token 128 token 维度 tile
block_dhidden 128 d_hidden 维度 tile
block_dexpert 128 d_expert 维度 tile
threads 512 每 block 线程数
num_stages 1 Pipelined 级数
无 split split-K 实测负收益

5.5 性能现状(cfg0)

配置 ms/call 分数 相对 baseline
小 tile 64/64/ns2/t256 16.06
大 tile 128/128/ns1/t256 11.30 -30%
大 tile t512 9.60 -15%
大 tile t1024 ~12.0 -25%
大 tile t512 + split_k=2 (OJ) 9.91 53.16 -4.3%
大 tile t512 (OJ, 最优) 9.502 54.21

5.6 职责划分:Host vs Kernel

步骤 位置
Router(softmax + top-k) PyTorch(MoEGate
分组排序、padding PyTorch(host 侧)
gate GEMM、up GEMM TileLang Kernel(Stage 1)
SiLU、gate·up 乘法 TileLang Kernel(Stage 1 epilogue)
down GEMM、乘专家权重 TileLang Kernel(Stage 2 epilogue)
跨专家 Σ 求和(scatter_reduce) PyTorch

5.7 融合的四个层面

# 融合点 收益
1 gate + up 双 GEMM 合在 Stage 1,共享同一份 x 分块 x 只读一次;少一次 launch
2 SiLU + gate·up 乘法融进 Stage 1 epilogue 不物化 gate_logits 中间张量
3 乘专家权重融进 Stage 2 epilogue 省一轮读写
4 跨专家分组 GEMM n 次 launch 变 1 次

5.8 瓶颈诊断(mcProfiler 证据)

cfg0 瓶颈:卡在 Stage 2(K=8192 的 64 轮长依赖链)

指标 Stage 1 Stage 2
TotalCycles 占比 52.5% 47.5%
per-wave vls stall 30K(已兑现) 118K(必要等待)
vls_pipeline_stall / AP active 66.5% 74.7%
MMA duty(真实值) 17.8% 10.1%
blocks / AP 1536/104 ≈ 14.8 384/104 ≈ 3.7

cfg1 瓶颈:卡在 Stage 1(K=7168 的 56 轮 + smem 锁死 1 block/AP)

指标 Stage 1 Stage 2
TotalCycles 占比 52.7% 47.3%
per-wave vls stall 104K(必要等待) 30K(未验证)
MMA duty 18.4%(全场最高) 9.9%
blocks / AP 768/104 ≈ 7.4 2688/104 ≈ 25.8

关键发现:K 链长的一侧(16 轮 → 30K per-wave;56-64 轮 → 104-118K per-wave)构成”结构性必要等待”——所有并行度杠杆(split-K / 小 tile / t1024 / 双缓冲)均实测无效或负收益。

5.9 关于”融合”的澄清

不是一次 launch 的终极融合,而是两次连续 launch 的”两段式融合”。

“gate/up 产出 → down 消费”之间必须经全局内存——因为一个 128-token tile 的 up_logits128×2048×2B=512KB,远超 C500 的 64 KiB WSM。这是所有主流实现都采用的结构。


6. MLA / NSA 算子

6.1 FlashMLA(Multi-head Latent Attention)

文件race_tests/mla/test_tilelang_mla.py

TileLang 实现的 Flash Attention 风格 MLA kernel,支持 split 与 no-split 两种模式。

核心特性

  • Q/KV 分离的 RoPE 位置编码处理(Q_pe / K_pe
  • 支持 split-KV(num_split > 1)与 combine kernel
  • GQA (Grouped Query Attention) 支持
  • T.use_swizzle(10) 改善 L2 命中

参考实现example/FlashMLA/(含 CUDA 源码与 PyTorch 接口)

6.2 NSA(Native Sparse Attention)

文件race_tests/nsa/test_tilelang_nsa_fwd.pyrace_tests/nsa/reference.py

基于 block-sparse 的原生稀疏注意力机制。

核心特性

  • 每个 query token 选择 S 个 key block 计算注意力
  • 支持 causal masking
  • Grouped Query Attention(groups = HQ // H
  • 与 PyTorch naive_nsa 参考实现对比验证

当前限制

  • Shared memory 需求较大,部分配置会超 64 KiB 上限
  • 大配置跳过参考对比(naive_nsa 是 O(N²) Python 实现)

7. 性能优化指南

7.1 优化策略速查表

优化策略 对计算的好处 对访存的好处
最大化占用率 隐藏流水线延迟 隐藏 DRAM 延迟
线程粗化 平摊创建开销 提高共享内存数据复用
合并全局内存访问 减少全局内存请求
向量化访存 提高实际带宽
减少共享内存体冲突 提高 WSM 带宽
减少控制发散 减少无效线程 增加合并访存
使用编译期常量 减少指令数 增加内存级并行
使用 __restrict__ 减少指令数 增加内存级并行
Warp 特化 避免加载阻塞计算
私有化 减少原子更新竞争

7.2 优化方法论(数据路径图方法)

分析任意 Kernel 时按以下三步:

  1. 判断吞吐瓶颈:检查各执行单元 duty(MMA/MTE/STE/L2C/HBM)
  2. 定位延迟站点:识别 stall 构成,找出等待主导的路径段
  3. 评估延迟掩盖上限:检查并行度(block 数、wave 数)与串行链长的匹配

典型思考框架:

墙钟时间 ≈ Σ(每 AP 串行 block 数 × 每 block K 循环轮数 × 每轮串行下界)
            - 可被并行掩盖的延迟

7.3 C500 关键优化约束

约束 影响
WSM 64 KiB/AP 决定每 AP 并发 block 数上限(大 tile → 1 block/AP)
VL1 默认关闭 L2 直接响应所有 transaction,VL1 hit rate 不参与诊断
Wave 64 线程 Coalescing 组为 4×16 threads → 4×128B transactions
寄存器 256/lane 大 tile + fp32 累加容易 spill
半双工 DRAM↔L2 读写不可同时进行

7.4 优化案例:MoE Kernel 的经验教训

尝试 结果 教训
小 tile + 双缓冲 -36% 放大 MTE 搬运指令
大 tile + t256 -30% 吞吐减半但出现 spill
大 tile + t512 -15% 消除 spill + per-wave stall 减半
大 tile + t1024 -25% 同步开销爆炸
split-K -4.3% 原子加 + finalize 纯开销
Stage1 A 先搬 shared -21% 窄访问换通路(VLS→BSM),stall 塌 8.6 倍
Stage1 block_dexpert=128 -5.3% 削 spill,0 栈帧

8. mcProfiler 性能分析工具

8.1 概述

mcProfiler 3.8.1.4 是 MetaX C500 配套的性能分析工具,基于 Client-Server 架构。

组件 路径 作用
客户端 /usr/local/bin/mcProfiler CLI(Python Flask 客户端)
服务端 /opt/mcProfiler-ubuntu18.04/profiler_server 监听 127.0.0.1:50123
GUI /opt/mcProfiler-ubuntu18.04/gui-profiler-0.1.0.AppImage 图形界面
配置文件 /opt/mcProfiler-ubuntu18.04/config/*.pcd 指标定义

8.2 一键 Profiling 流程

cd /data/metaxRace/race_tests/moe
./profile_mcprof.sh           # 使用默认配置
MOE_PROF_CFG=1 ./profile_mcprof.sh   # 使用 cfg1
PER_KERNEL=1 ./profile_mcprof.sh 0   # 逐 kernel detail

8.3 关键口径修正(重要)

口径 说明
AP busy Duty 分母为 Total Cycles(含 host),被稀释
单元 duty(MMA/MTE/STE/L2C) 分母为 AP active cycles(kernel 窗口),真实值可直接读
计数类(指令数/字节/hit rate) 不受影响,单次直接读
stall 对比必须按 wave 归一 wave 数变化的 A/B 中 stall 占比会因争用假象失真

8.4 常用指标

HEAD: Summary          — Total Instructions/Cycles, AP busy Duty, RoofLine
CE Statistics          — WORKGROUPS, WAVES, Average Wave life cycles
ISU Statistics         — stall cycles layout, DPC comparison
Memory Statistics      — Global/Private/Shared 指令数, L2C/VL1 Hit Rate
Occupancy              — Achieved/Dispatched waves
GPU Throughput         — AP/MMA/MTE/STE/VLS/L2C Duty ratio
Compute workload       — IPC, instruction throughput/efficiency

8.5 已知问题

  1. config/ 按 CWD 解析:必须在 /opt/mcProfiler-ubuntu18.04 下运行 mcProfiler
  2. 报告异步生成perf done 后约 5-6 分钟才生成 report.txt.json
  3. --headnames 900s+ timeout:不做无人值守采集
  4. full-event = 9 batches:任务重跑 9 遍,每遍换一组 perf event
  5. **--single-pass**:不稳定(出现过 108050% duty 异常)

9. 工程文件清单

9.1 竞赛测试

文件 职责
race_tests/moe/custom_fusedmoe.py TileLang Fused MoE Kernel(主入口)
race_tests/moe/ref_fusedmoe.py PyTorch 参考实现
race_tests/moe/fusedmoe_benchmark.py host 侧编排:router、分组、测试
race_tests/moe/moe_test_configs.json 功能/性能测试配置
race_tests/moe/moe_prof_driver.py Profiling 被测进程
race_tests/moe/profile_mcprof.sh 一键 profiling 编排
race_tests/moe/mcprof_summary.py Profiler 报告摘要解析
race_tests/mla/test_tilelang_mla.py FlashMLA TileLang kernel
race_tests/nsa/test_tilelang_nsa_fwd.py NSA TileLang kernel
race_tests/nsa/reference.py NSA PyTorch 参考实现

9.2 参考实现与算子库

路径 内容
example/FlashMLA/csrc/ FlashMLA CUDA 源码(含 kernel/dispatch/run)
example/mcoplib/kernel/ 14 个 CUDA kernel(MoE gate/RoPE/RMSNorm 等)
example/mcoplib/op/ 31 个算子入口
example/mcoplib/benchmark/ 130+ 算子 benchmark 配置
example/kernels/ 各类 kernel 参考(TileLang CUDA)

9.3 性能分析工具与脚本

文件 职责
skills/mcprof-report-skill/SKILL.md mcProfiler 报告分析技能
skills/mcprof-report-skill/metax-kernel-guide.md C500 Kernel 开发指南
skills/mcprof-report-skill/tests/conformance/ mcProfiler 语义一致性测试
doc/mxmaca-performance-tuning-guide/guide/ 10 章性能优化文档
doc/mxmaca-performance-tuning-guide/case/ 文档对应示例代码
doc/mxmaca-performance-tuning-guide/microbenchmark/ 微架构参数测试

10. 开发计划与状态

10.1 McProfiler 报告分析技能状态

轨道 状态 说明
Track A:确定性工具工程 ✅ 完成 manifest/normalization/report parser/通用 collector
Track B:mcProfiler 采样语义 ✅ 完成 3.8.1.4 conformance matrix 固化
Track C:C500 诊断知识 ⚠️ 部分完成 基础事实、来源分级完成;counter 公式/全卡基线待验证

10.2 仍需验证的项目

项目 优先级 说明
Counter 公式(Duty 分母等) 需官方定义或更强对照实验
全卡绝对健康区间 当前设备为 25% compute sGPU
JIT 编译/初始化额外 launch 不能从 warmup 外推
--headnames 900s timeout 是否稳定复现
诊断阈值噪声门控 需 3 次独立 full-event baseline

10.3 后续顺序

  1. 在 full C500 环境重跑 conformance 与微基准
  2. 验证 duty/shared/Roofline 公式
  3. 建立按 workload family 的统计基线
  4. 将高置信度模式写入 diagnosis engine
  5. 用真实目标 kernel 做闭环复测

附录 A:MoE 优化 A/B 报告索引

run 配置 说明
run_cfg0_20260810_025910 小 tile 64/64/ns2/t256 Baseline
run_cfg0_20260810_032333 大 tile 128/128/ns1/t256 -30%
run_cfg0_20260810_033517 per-kernel detail (t256) 首次区分 stage1/stage2
run_cfg0_20260810_041838 大 tile t512 -15% (当前最优)
run_cfg0_20260810_050659 per-kernel detail (t512, 无 split) 确认 stage 占比
run_cfg1_20260810_055801 cfg1 per-kernel detail cfg1 瓶颈分析
OJ split_k=2 大 tile t512 + split -4.3% (否定)

附录 B:mcProfiler 一键命令参考

# 启动服务端
/opt/mcProfiler-ubuntu18.04/profiler_server &

# 手动 perf_exec
cd /opt/mcProfiler-ubuntu18.04
./mcProfiler perf_exec \
  --cmdline '/opt/conda/bin/python /data/metaxRace/race_tests/moe/moe_prof_driver.py --iters 30 --warmup 3' \
  --casename 'moe_fused_gemm' \
  [--per-kernel] [--counts 50] [--single-pass]

# 查看指标
./mcProfiler show_metrics
./mcProfiler version
./mcProfiler help

附录 C:TileLang 安装

bash /data/metaxRace/init_tilelang.sh

安装脚本支持三级回退:

  • [A] /opt/tilelang-metax-v0.1.10 已编译 → .pth 注册(秒级)
  • [B] 源码存在 → pip install -e .(触发编译)
  • [C] 源码不存在 → git clone + install
关于

沐曦比赛的算子开发代码

4.2 GB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号