快科技 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 的高延迟拖累整体性能。

【本文结束】如需转载请务必注明出处:快科技
责任编辑:红茶


登录后才可以发布评论哦
打开小程序可以发布评论哦