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

如何分析Zen4上AVX-512双精度计算的指令流水线?

Zen4平台AVX-512双精度计算性能分析问题

我已获得AMD Zen4服务器的访问权限,测试了AVX-512打包双精度计算的性能。选用调和级数(即正整数的1/n求和)作为测试场景,对比了标准双精度、AVX2(4个打包双精度)和AVX-512(8个打包双精度)的性能表现。

AVX2版本比标准双精度版本快4倍,但我原本预期AVX-512版本比AVX2版本快2倍,实际运行时间几乎没有明显提升:

Method                          Runtime (minutes:seconds)
HarmonicSeriesPlain             0:41.33
HarmonicSeriesAVX256            0:10.32
HarmonicSeriesAVX512            0:09.82

为排查该现象,我测试了单独的除法运算,结果如下:

Method                  Runtime (minutes:seconds)
div_plain               1:53.80
div_avx256f             0:28.47
div_avx512f             0:14.25

有趣的是,div_avx256f耗时28秒,而HarmonicSeriesAVX256仅需10秒完成——后者执行了更多操作(对结果求和并每次递增分母,打包除法的次数相同),这种加速必然源于指令流水线的优化。

不过,我需要帮助获取更深入的分析细节。

使用llvm-mca(LLVM机器码分析器)进行分析失败,因为它尚不支持Zen4:

gcc -O3 -mavx512f -mfma -S "$file" -o - | llvm-mca -iterations 10000 -timeline -bottleneck-analysis -retire-stats
error: found an unsupported instruction in the input assembly sequence. 
note: instruction:     vdivpd %zmm0, %zmm4, %zmm2

在Intel平台上,我会使用perf stat -M pipeline binary来获取流水线细节,但该指标组在Zen4上不可用。我已尝试以下perf stat事件:

cycles,stalled-cycles-frontend,stalled-cycles-backend,cache-misses,sse_avx_stalls,fp_ret_sse_avx_ops.all,fp_ret_sse_avx_ops.div_flops,fpu_pipe_assignment.total,fpu_pipe_assignment.total0,
fpu_pipe_assignment.total1,fpu_pipe_assignment.total2,fpu_pipe_assignment.total3

从结果中可以看出该工作负载属于后端受限,AMD的性能事件fp_ret_sse_avx_ops.all(已退役的SSE/AVX操作数)有一定帮助,但我仍希望更深入了解Zen4的指令流水线,有什么可行的分析建议?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:10:28