M4 芯片的神经引擎(ANE,代号 H16G)并非通用 GPU 或 CPU,而是专为神经网络图执行优化的固定功能加速器。其核心计算单元之一是矩阵乘法(matmul)加速器,这种设计通过高水平参数化 tensor 描述符驱动硬件原语,实现高效推理。逆向工程揭示,matmul 并非软件循环展开,而是编译到固定大小的 E5 二进制微码(约 2.6KB),大小几乎不随矩阵规模变化,证明硬件内置高效 GEMM 引擎,内部自动处理 tiling 和并行。
证据来自直接访问 _ANEClient API 的基准测试:在 FP16 精度下,2048×2048 matmul 达到 5.7 TFLOPS,接近硬件峰值;但 4096×4096 降至 4.0 TFLOPS,性能崖源于 SRAM 容量约 32MB。三个 FP16 矩阵(A、B、C)工作集在 2048 大小时约 24MB,完美适配 SRAM;4096 时飙升至 96MB,强制溢出至 DRAM,导致带宽瓶颈和 30% 吞吐损失。这暗示 tile size 设计围绕 SRAM 银行优化,可能为 32×32 或类似块,但精确尺寸需进一步二进制解析确认。
稀疏处理方面,当前逆向未发现专用硬件支持。ANE MIL 表示和 E5 格式仅处理稠密 tensor,无 CSR/BCSR 或结构化稀疏掩码编码。INT8 输入虽支持,但硬件 dequantize 至 FP16 计算,无 2× 加速,仅节省内存带宽。开发者若需稀疏,可软件实现块稀疏布局,叠加在稠密 matmul 上,但无法利用潜在 sparsity accelerator(若存在)。
推理优化关键在于绕过 CoreML 开销,直接用 _ANEInMemoryModelDescriptor 内存编译 MIL,避免文件 I/O。ANE 队列深度达 127,支持高吞吐流式推理,但单次 dispatch 开销~0.095ms,小矩阵(<256×256)受限。最大化利用需构建深图:链 16-64 个操作,单 matmul 仅用 30% 容量。
更优策略:用 1×1 卷积替代 matmul。将 C [M,N] = A [M,K] @ B [K,N] 重塑为输入 (1,K,1,M)、权重 (N,K,1,1)、输出 (1,N,1,M),ANE conv 数据路径效率高 3×。基准显示,相同 FLOPs 下 conv 远超 matmul,尤其 SRAM 内。
可落地参数与清单:
矩阵尺寸阈值:
- 峰值:≤2048×2048(~24MB SRAM)
- 警告:2048-3072(渐降)
- 避免:≥4096(DRAM 溢出,-30%)
图结构优化:
- 深度:≥16 层,接近 94% 利用率(19 TFLOPS FP16 峰值)
- 操作链:conv > matmul > elementwise
- 批次:1(典型推理),队列并行 127
精度与量化:
- 计算:FP16 原生
- 输入:FP32/INT8(自动 dequant)
- 布局:NCDHW + interleave,零拷贝 IOSurface
监控要点:
- 功耗:2.8W 峰值,6.6 TFLOPS/W,闲置 0mW(硬关断)
- 时延:>1ms 计算主导,<1ms dispatch 主导
- 回滚:若编译失败,检查 NSData vs NSString、temp 目录权限
开发清单:
- dlopen AppleNeuralEngine.framework,objc_getClass("_ANEClient")
- 生成 MIL:tensor 显式 shape/precision,conv 优先
- 内存编译:weights NSDictionary<NSString*, NSData*>
- IOSurface I/O:GPU 共享零拷贝
- 基准 mach_absolute_time (),中位数 100+ iter
- 缓存 E5:初次 20-40ms,后续瞬时
混合策略:大批量 prefill 用 ANE,单 token decode 用 CPU SME(无 dispatch 开销)。此优化在 M4 Mac Mini (macOS 15+) 验证,绕 CoreML 获 2-4× 加速。Apple “38 TOPS INT8” 实为 19 TFLOPS FP16 ×2 惯例,真硬件无 INT8 加速。
实际部署,监控 SRAM 命中:若 perf <90% 峰值,拆分图或降尺寸。未来若解析 E5 头,可精确 tile size,反推核心 MAC 阵列(估~1.2 TFLOPS/core ×16)。
资料来源: [1] https://maderix.substack.com/p/inside-the-m4-apple-neural-engine “ANE 支持队列深度 127。” [2] https://maderix.substack.com/p/inside-the-m4-apple-neural-engine-615 “1×1 conv 比 matmul 快 3×。”