You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple M1/M3/M4 CPU中aese/aesmc指令分数周期延迟机制问询

Apple M1/M3 Max/M4上ARM AES指令延迟特性测试与分析

测试背景与M1结果复现

我正在测试Apple M1、M3 Max和M4 CPU中ARM的aese与aesmc指令的延迟特性。

针对M1,Dougall Johnson测得*融合指令对aese+aesmc*的延迟为3周期。我基于ibireme的代码修改profile_func后复现了该结果:

#define AESE_AESMC \
            "aese.16b %[vi], %[vsk]\n\t" \
            "aesmc.16b %[vi], %[vi]\n\t"

static void profile_func(void) {
    uint8x16_t vi = vdupq_n_u8(0), vsk = vdupq_n_u8(0);

    asm volatile("nop");
    for (uint64_t i = 0; i < 2097152; i++) {
        asm(
            // 64 copies of AESE_AESMC
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC AESE_AESMC 
            : [vi] "+&w"(vi) : [vsk] "w"(vsk)
        );
    }

    asm volatile("" : : "r,m"(vi) : "memory");
}

在M1上用-O3 -falign-loops=64编译运行,得到结果:

cycles: 404296596
  instructions: 272824106

分析汇编可知共有130条指令(64条aese+64条aesmc+subs+b.ne),将指令数除以2(因aese与aesmc融合)并乘以修正系数128/130后,得到CPI为3.01,与Dougall的结果一致。

M3 Max与M4的特殊测试结果

在M3 Max和M4上运行相同代码时结果更特殊:

  • M3 Max的结果为:
cycles: 359632763
  instructions: 273144120

经相同修正后CPI为2.67;

  • M4的结果为:
cycles: 296016336
  instructions: 272749120

修正后CPI为2.20。

我还单独测试了aese指令,得到M1、M3 Max、M4的CPI分别为3.00、2.67、2.14。

并行流配置的困惑

我试图理解M3 Max和M4的分数周期延迟对AES实现并行流数量选择的影响:

  • M1有4个可执行这类指令的执行单元,延迟3周期,需至少12个并行流才能达到最佳性能,实际测试IPC接近8(4个执行单元×2条融合指令)。
  • M3 Max按计算只需11个并行流,但实际该配置下IPC约7.14,12个并行流时IPC接近8,初步推测延迟在2-3周期波动,需12个流才能充分利用执行单元。
  • M4的情况更复杂:理论计算需9个并行流,但最高IPC仅6.22;12个流时IPC约7.56,需至少14个流才能接近8的IPC,这似乎说明延迟有时会超过3周期。

恳请业内人士从底层机制角度,解释M3 Max与M4 CPU出现上述测试结果的原因,以明确AES实现的最优并行流配置。


内容的提问来源于stack exchange,提问作者swineone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:12:44