AMD Epyc Zen 2因自旋循环性能下降问题求助
多线程SIMD矩阵向量乘法在AMD Zen 2上的性能异常问题
背景
- 实现了一款多线程SIMD矩阵向量乘法,在目标规模下性能优于Intel MKL
- 仅在AMD Zen 2处理器上出现异常,Intel Xeon SP Skylake无此问题
异常时序表现
- 迭代“0”之前:连续执行100,000次乘法,每次执行时长稳定
- 迭代“0”开始:在乘法之间加入自旋循环后,不到10次迭代,执行时长就大幅上升并稳定在原时长数倍的水平
- 移除自旋循环后,需数十次迭代才能恢复至原性能
- 性能变化可视化:

已尝试的无效优化手段
- 在自旋循环中加入
_mm_pause() - 预取矩阵部分数据
- 在AVX寄存器中执行其他计算
- 反复执行列数更少的同矩阵向量乘法
当前推断
只要CPU在短时间内执行了与完整规模乘法不同的操作,后续乘法性能就会大幅下降;当乘法间隔超过一次“热”乘法的时长时可能触发该现象(待确认)
系统调优状态
- 已禁用所有影响确定性的节能模式
- 程序以高
SCHED_FIFO优先级运行 - 线程已绑定至CPU核心
求助问题
- 能否解释CPU内部可能发生的情况?
- 如何在乘法间存在短暂间隔时仍保持良好性能?
内容的提问来源于stack exchange,提问作者northwindow
相关产品推荐
相关产品推荐

