本周早些时候,英特尔编译器工程师发布
支持Intel APX NDD的修补程序
作为高级性能扩展的“新数据目的地”功能。这些工程师在本周结束时发布了为GCC启用APX PPX的补丁,这是即将添加的ISA的新Push Pop Acceleration。
英特尔开源编译器团队的王宏宇解释了APX PPX的功能:
PPX代表Push Pop Acceleration。PUSH/PUSH2及其对应的POP可以用1位提示来标记,以指示POP从堆栈中读取PUSH写入的值。处理器在内部跟踪这些标记的指令,并在匹配的PUSH和POP指令之间快速转发寄存器数据,而无需经过存储器或快速存储转发预测器(FSFP)的训练循环。PUSH2/POP2也可以采用此功能。
对于GCC,我们发出显式后缀'p'(paired),以指示推送/弹出对标记有PPX提示。为了分离原始的推送/弹出,我们使用UNSPEC来限制与PPX相关的模式。因此,对于pushp/popp,cfi是为UNSPEC PPX insns手动调整的。
在第一个实现中,当保存/恢复被调用者保存的寄存器时,我们只在序言/尾声下发出它们,以确保push/pop是成对的。因此,添加了一个额外的标志来检查是否可以为这些寄存器保存/恢复接口发出PPX-insns。
PPX提示纯粹是一个性能提示。如果配对推送/弹出没有发出“p”后缀,则PPX优化将被禁用,而程序sematic将完全不受影响。
此修补程序
gets the Push-Pop Acceleration all wired up as the latest piece of the APX puzzle for the GNU Compiler Collection. As mentioned though with the GCC 14 feature development ending imminently, it's not clear Intel APX support will be completed in time for GCC 14 and thus it might not be until GCC 15 in early 2025 before all of the Advanced Performance Extensions functionality will be implemented and rolled out into a stable GCC release.