跳到正文
cccskills
免费在 GitHub 公开

cpu-optimize

Find why MNN CPU inference is slow by examining threads, scheduling, memory layout, and the processor instruction path actually used. Operator-level measurements and comparisons with other inference frameworks help identify which layer needs improvement across ARM, x86_64, and RISC-V.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

MNN CPU 后端性能归因分支(`skills/cpu/` 下,另一分支是 `cpu/kernel` kernel 开发)。

按五层(Runtime 线程 / Executor 调度 / Layout 内存 / Dispatch 函数表 / Kernel ISA)定位瓶颈,含 bound 类型判定、op 级实验回路、跨框架 op 对 op 对比、跨层不一致的事后定位,以及 ARM / x86_64 / RISC-V 三侧「我到底跑在哪条 ISA 路径上」的诊断面。

CPU 上算子或 LLM prefill/decode 慢、线程数或内存占用异常、出现性能回归、要与外部推理框架逐算子对比时使用。

查看安装方法

适用场景

  • Investigate slow CPU operators or LLM inference
  • Diagnose thread count and memory usage anomalies
  • Locate the cause of a performance regression
  • Compare the same operator across inference frameworks
  • Verify the processor instruction path actually used

包含的文件(8)

  • SKILL.md6.9 KB
  • arch/arm.md14.7 KB
  • arch/riscv.md11.0 KB
  • arch/x86_64.md12.5 KB
  • bugfix.md21.5 KB
  • diagnose-and-route.md17.7 KB
  • layout-and-memory.md15.0 KB
  • runtime-and-scheduling.md18.5 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

MNN CPU 后端性能优化

触发条件:优化或评审 CPU 上的 MNN 算子、低 bit GEMM/GEMV、LLM prefill/decode 性能; 排查 CPU 侧线程 / 调度 / 布局 / 内存 / dispatch 的性能回归。ARM、x86_64、RISC-V 均适用。

本分册回答什么

「为什么慢,该改哪一层」。

本分册是 skills/cpu/ 的性能优化分支。ISA 路径的诊断面在本分册内 (arch/arm.md / arch/x86_64.md / arch/riscv.md);构建测试与 env 开关是两个分支 共用的工具,在 cpu/shared/。

不回答「这个 kernel 怎么写」——那是 cpu/kernel。 不回答「这个 op 框架里有没有」——那是 add-new-op。

你的问题去哪
慢,不知道原因本分册,从 diagnose-and-route.md 开始
已定位到某个 kernel,要动 SIMD/asmcpu/kernel(必须先有性能数据)
结果不对(不是慢)bugfix.md,或框架级 general-debug
这个 op MNN 里还没有add-new-op
RISC-V / RVV / 厂商矩阵扩展(IME2)在哪条路径上arch/riscv.md
要在 RISC-V 开发板上交叉编译、跑正确性与性能cpu/shared/riscv-remote-validation.md
要跑 CI / 加测试阶段test-ci

前置纪律

三条各侧共用的纪律(先确认路径再谈性能 / 先正确再加速 / 数字必须带维度标签)在 cpu/SKILL.md「三条共用的前置纪律」,全树只有那一份,本文不复述。

本分册只补一条落地方式:「先确认路径」在性能归因里是第一个动作,不是背景知识。 开跑之前先用 arch/arm.md / arch/x86_64.md / arch/riscv.md 的自证方法确认 这次到底跑在哪条 ISA 路径、哪张函数表上——走错路径不报错,而基于错路径测出的数字全部作废。

起点

先读 diagnose-and-route.md,它做三件事:排除「路径不对 / 数字不可复现」这两个最廉价的解释;把实验回路从端到端缩到 op 级(按「时间占比 ÷ 工作量占比」挑最不划算的 op,为它建贴场景的用例,跨框架对比时两边都建同一个 op 的用例);然后按 bound 类型把你路由到下面某一层。

分层文档

五层坐标系(每层管什么、典型改动是什么、去读哪份文档,含 L4/L5 的诊断面与实现面两个去处) 在 diagnose-and-route.md §三——那张表全树唯一一份,本文不复述。 本分支自己的文档就是它「去哪读」一列里的 runtime-and-scheduling.md(L1/L2)、 layout-and-memory.md(L3)、arch/(L4 诊断面)。

跨层交界处(L2↔L3 的 stride、L3↔L4 的 pack 与 tile、L4↔L5 的 ABI)是最贵的坑集中地, 表现多为「不崩、结果略差」,统一收在 bugfix.md。

工具文档(父级共享)

文档用途
cpu/shared/build-test-and-benchmark.md构建开关、run_test.out 使用规则、真实测试名注册表、llm_demo / llm_bench、验证矩阵模板、实验纪律、结果记录规范
cpu/shared/env-registry.md环境变量 / 编译宏 / backend flag / constexpr 四种机制的区分与逐项语义。用任何开关做 A/B 前先查这里

CoreFunctions 复用清单

优化的第一选择是复用而不是新写。每处复用都要验证精确语义(参数含义、layout、转置、归一化方式、 in-place 安全性、tail 行为、量化后处理),不能只看函数名。

这张表全树唯一一份,两个分支共用:kernel 的「该不该写 kernel」门禁 (kernel/SKILL.md 铁律 2)直接引用它,不再另抄一份。

函数优先用途注意点
gcore->MNNPackedMatMul大规模 GEMMPack 开销要能摊薄
gcore->MNNPackedMatMulRemainGEMM tail和主 kernel layout 一致
gcore->MNNComputeMatMulForE_1E=1 GEMV/decodeLLM decode 优先看这里
gcore->MNNComputeMatMulForH_1H=1 VecMat确认矩阵方向
gcore->MNNScaleAndAddBias / MNNScaleAndAddBiasScalarscale+bias检查 in-place
MNNSoftmaxsoftmax确认 axis/layout
MNNNormLayerNorm/RMSNorm确认 mean/rms 语义
gcore->MNNNormPackedNC4/NC8 LayerNorm/RMSNorm确认 pack、batch stride、residual fusion、tail 和线程分片
MNNExp / MNNSiLu激活部分函数不支持 in-place
gcore->MNNPackCUnit / MNNUnpackCUnitNC4/NC8 重排pack size 由 runtime 决定
gcore->MNNPackC4ForMatMul_A / MNNPackForMatMul_BMatMul pack和 kernel pack mode 配套
MNN_CONCURRENCY_BEGIN/END多线程注意 per-thread pointer 偏移

两条反向提醒:小 shape 上重型 pack+matmul 可能比朴素循环慢;为了复用现成 kernel 把融合算子 拆成多遍访存是净亏,优先扩展现有 CoreFunctions 入口以保留融合语义。

参考文件

文件用途
source/backend/cpu/compute/CommonOptFunction.hCoreFunctions / MatmulRelatedFunctions 定义与签名
source/backend/cpu/CPUAttention.cppMatMul/Softmax/Norm/多线程复用参考
source/backend/cpu/compute/DenseConvolutionTiledExecutor.cpppack、tiling、线程拆分参考
source/backend/cpu/compute/ConvInt8TiledExecutor.cpp低 bit int8 的 tile / 分片 / kernel 选择主战场
source/backend/cpu/arm/arm64/MNNPackedMatMul.SAArch64 asm 风格参考
test/speed/MatMulSpeed.cppspeed test 组织方式参考

复盘

非平凡任务结束后,如果产生了可复用的教训,走 retrospective: 把可复用的结论上提到对应层文档或 bugfix.md,实验过程与原始数字不进本仓。

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Add new operators to MNN through a staged workflow covering data definitions, output shapes, computation, and tests. It prioritizes combining existing operators, with CPU implementations and additional hardware backends used when needed.

中文简介正在准备中。当前显示英语简介。

  • Adding a new operator to MNN
  • Implementing output shape calculations
  • Combining existing operators for new operations
alibaba/MNN1.6万2026年10月16日 更新

bugfix

免费

Triage incorrect MNN outputs and regressions by matching symptoms to focused debugging guides. Use backend comparisons, minimal reproductions, and controlled experiments to investigate memory issues, quantization, concurrency, numeric limits, caches, and inconsistent results across runs.

中文简介正在准备中。当前显示英语简介。

  • Investigating garbled or degraded MNN output
  • Comparing results across execution backends
  • Tracking regressions after optimization changes
alibaba/MNN1.6万2026年10月16日 更新

cpu

免费

Find the right workflow for MNN CPU work, from investigating slow execution to implementing calculation routines and planning tests. Compare ARM, x86_64, and RISC-V backend structures before choosing the relevant guidance.

中文简介正在准备中。当前显示英语简介。

  • Choosing where to start an MNN CPU performance investigation
  • Finding guidance for CPU kernel implementation
  • Comparing ARM, x86_64, and RISC-V backend structures
alibaba/MNN1.6万2026年10月16日 更新

Develop or port CPU kernels, the low-level calculation routines used by MNN. Follow staged implementation guidance, check data layout agreements, register functions, and verify correctness across processor instruction sets and numerical precision settings.

中文简介正在准备中。当前显示英语简介。

  • Implementing or porting an MNN CPU kernel
  • Adding support for a processor instruction set
  • Changing packed data layouts or tile sizes
alibaba/MNN1.6万2026年10月16日 更新

Optimize and troubleshoot MNN's Hexagon DSP backend, which runs computation on a dedicated processor. The workflow uses device measurements to identify bottlenecks, compare v79 and v81 architectures, verify correctness, and investigate crashes or memory usage.

中文简介正在准备中。当前显示英语简介。

  • Finding bottlenecks in Hexagon operators
  • Checking changes on v79 and v81 devices
  • Investigating cDSP crashes and device disconnects
alibaba/MNN1.6万2026年10月16日 更新

Guide MNN Metal backend development and optimization, from finding performance bottlenecks to changing GPU computation, combining operators, and adjusting execution scheduling. A task-based document index directs work toward relevant implementation rules, benchmarks, and correctness checks.

中文简介正在准备中。当前显示英语简介。

  • Finding bottlenecks in Metal inference
  • Adding or modifying Metal kernels
  • Combining operators into one GPU dispatch
alibaba/MNN1.6万2026年10月16日 更新

查看 alibaba 的全部技能

报告此技能的问题