Apple M3 Neural Engine 的 50 GB/s 性能陷阱

Getting 50 GB/S Back from the Apple Neural Engine

Apple M3 Neural Engine 的 50 GB/s 性能陷阱

在调试 Apple M3 Neural Engine 时,我发现了一个隐蔽的 RTL 性能缺陷:当权重数据大小为 1 MiB 的整数倍时,DRAM 吞吐量会从正常的 45–60 GB/s 骤降至 17–19 GB/s。这导致 Llama 3.2 和 Qwen3 等模型的推理速度大幅下滑。通过深入分析 DMA 引擎的 speculative prefetch 机制,我定位到问题根源在于 14 位计数器在特定边界发生的整数溢出。通过避开这一特定路径,我们成功将 Llama 3.2 的 token 生成速率从 10.0 提升至 24.3 tokens/s,让硬件性能回归预期。

这并非 RTL 正确性错误,因为内核 DMA 仍能正确完成传输,但在 2048 附近的请求被强制进入一个独立的、信用匮乏的调度机制,导致吞吐量被不合理地削减了 28 到 43 GB/s。
  1. bee_rider

    调查得很棒。

    每次看到像 1MiB 这样规整的数字竟然会导致“性能不佳”的配置,我都感到惊讶(虽然这种情况确实存在)。

    你确定在这个语境下用 erratum 这个词合适吗?我通常看到它被用来描述指出文档中存在错误的勘误通知。

  2. thenewwazoo

    “显然,内存控制器的吞吐量在张量维度空间中有一个占主导地位谐波,其波长为 2048。”

    这句话让我笑出了声。

  3. anemll

    并非所有系统都受影响

    M1 和 M5MAX 没问题

    https://x.com/anemll/status/2098454204478366132?s=20

  4. Neywiny

    只是想确认一下——这段 systemverilog 代码是你推测可能发生了什么而写的假设性描述?还是你手里真的有 RTL 的源代码?

  5. londons_explore

    Apple 内部肯定有人会在流片前,用 RTL 仿真器跑过一些常见的神经网络架构,并检查性能是否符合预期吧?

同日更多故事

2026-09-12