这几年创业,我仔细学习了ARM,当我越深的了解ARM时,我越感觉到X86的不足。X86多年停滞不前,已经被ARM超越了很远。
最近,因为要准备9月份的纳秒级优化训练营,我不得不又把注意力转回到x86上,因为在纳秒级优化所针对的听众里,他们主要还是用x86的。
在更新这些文档时,我意外地发现了一份新文档,Intel® Advanced Performance Extensions (Intel® APX) Architecture Specification(《英特尔高级性能扩展(APX)架构规约》)。
打开这份文档,读了几句后,我意识到这是个大动作(Big Thing),是我期待许久的。
APX把通用寄存器的数量从16个扩展为32个。
寄存器是CPU工作时可以快速访问到的临时空间,用图灵的话来说叫“
Quick reference temporary storage units (TS)”。
某种程度来说,影响CPU速度的关键因素是访问要计算的数据。当数据在寄存器中时,是最容易访问的。通用寄存器多,就可以让CPU把更多的数据放到寄存器里。
根据英特尔的官方资料,APX增加寄存器后对性能的改进是非常明显的。
Intel® APX doubles the number of general-purpose registers (GPRs) from 16 to 32. This allows the compiler to keep more values in registers; as a result, APX-compiled code contains 10% fewer loads and more than 20% fewer stores than the same code compiled for an Intel® 64 baseline.2 Register accesses are not only faster, but they also consume significantly less dynamic power than complex load and store operations.
除了通用寄存器,APX还引入了几个重磅特征:三操作数指令和谓词指令。
谓词指令是在指令中判断条件标志,可以减少分支语句,是消除分支的一种关键技术,在ARM上流行许久了。以前,x86曾引入cmov指令,但是太少了。APX做了一次彻底的升级,让很多指令都支持条件判断。
另外,APX还引入了成对保存和恢复寄存器的PUSH2和POP2指令,与ARM64的STP(Store Pair)和LDP(Load Pair)非常类似。
细看APX引入的变化,熟悉ARM的格友会觉得有很多ARMv8的影子,在我看来,也的确如此。但我觉得这是合理的。ARMv8里也有很多经典x86的影子。读ARMv8手册时我常有似曾相识的感觉,感觉到ARMv8的设计者们一定塾读过Intel 的SDM。
对于APX这样的改动,属于我开头说的“对经典x86特征的修改”,这样的修改涉及到软件接口(ABI)的变化,需要对上层建筑做较大的重构,包括编译器和操作系统。现在,已经可以搜索到一些关于APX的讨论,包括GCC的修改和支持。但是距离普通用户实际使用APX还要等待一段时间。
(写文章很辛苦,恳请各位读者点击“在看”,也欢迎转发)
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生
扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物
也欢迎关注格友公众号
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qklyjmjs/10367.html