现代的ISA和微架构在整体设计上趋于相同。若非要指出x86 ISA独特的精妙地方,或许就是复杂变长指令所具有的指令密度优势了。ARM以前也有Thumb2这种变长指令,不过AArch64舍弃了它,改成定长4字节的编码,且一直用到现在。由于变长和指令编码复杂,x86处理器近年增加解码宽度时困难重重。那它到底是精妙的设计,还是难以改善的糟糕架构……拿SPECint2017中的魔鬼测试mcf来说,经gcc 12采用-Ofast -flto参数编译后,其动态指令长度分布如下:
6888亿条动态指令,经计算,其平均指令长度为3.83。另外,x86能够打包更多复杂操作,所以指令数量相对较少。比如其内存相关指令有3077亿条,其中带CISC - style memory operand的指令达754亿条,所占比例为24.5%。手上目前没有ARM环境来实际统计。之前统计其他SPEC子项时,一般x86二进制的动态指令数量大概是ARM64的0.9 - 1倍,最终估算最多有十几个百分点的动态指令体积优势。高性能的x86微架构通常会利用op cache等方式,来减轻前端带宽的瓶颈问题,同时缩短等效流水线的长度。但最终还是得用大量的SRAM,去缓存解码后较长的定长指令。像Zen 4,其op cache容量接近60KB,可按照平均指令长度计算,只能覆盖大概25K左右的x86代码。所以看似精妙的设计,在现实中这个体积优势能发挥多少是个问题,说不定还是个很大的劣势。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号