8月27日消息,LLVM/Clang编译器昨天合入了一项针对AMD初代Zen架构的重要优化补丁,专门解决了Zen 1、Zen+及Zen 2处理器中“臭名昭著”的PDEP/PEXT指令性能问题。

编译工程师Simon Pilgrim基于对这些指令在实际运行中高昂成本的性能分析,重构了znver1/znver2目标下的指令调度逻辑。

PDEP(并行位存入)和PEXT(并行位提取)是BMI2扩展指令集中的两条位操作指令,常用于数据库、加密算法以及国际象棋、数独等游戏场景。

问题在于,初代Zen架构采用微码方式实现这两条指令,性能表现远不如硬件原生实现的预期,不仅延迟极高(实测可达约150个时钟周期),还会占用大量ALU流水线和uops资源。

此前编译器仅用“WriteMicrocoded”标签简单标记,完全无法反映其对流水线的真实冲击。

随着LLVM即将开始生成llvm.pdep/pext内联函数并向量化相关实现,编译器社区必须为老平台做出更明智的调度决策。

Simon Pilgrim根据uops.info和Agner的实测数据,取最坏情况的平均值作为调度依据,至少让调度器有了“可以工作的参考值”。

目前该补丁已合并至LLVM主线。对于仍在用锐龙1000/2000系列处理器跑编译任务或高性能计算的老平台用户来说,这次编译器层面的优化意味着未来程序在执行位操作密集型任务时,将获得更合理的指令调度,避免因PDEP/PEXT的高延迟拖累整体性能。

初代Zen的“性能毒瘤”被LLVM拔掉了!编译优化让老锐龙CPU回春

【本文来源:快•科技】