支持指令之变:SSE5和AVX的交融
除了核心架构之外,CPU的性能高低还很大程度上取决于支持的指令集。所以,以往每逢重大CPU产品发布,总会伴随着相应的指令集优化和扩充。这一次,推土机也不例外。除了SSE5,还有AVX。
X86架构处理器指令集演变
我们知道,在X86架构处理器中,SSE(Streaming SIMD Extensions,流式单指令多数据扩展)自诞生以来就占据了绝对的主导地位。不过,在此之前,每一次新版本的SSE指令集发布都似乎和AMD没有关系,无论是SSE、SEE2、SEE3还是后来的SSE4(4 .1/4.2)都是Intel率先发布的,AMD虽然有对应功能的指令集但名称均有所不同。
2007年8月30日,AMD突然宣布了下一代基于x86架构的扩展指令集,抢先发布“SSE5”,并计划配备在K10之后的下一代“Bulldozer”核心架构中,旨在先前SSE指令集的一些缺陷和不足,并充分发挥多核心、多媒体的并行优势。SSE5同样是128-bit指令集,一共有170条指令,其中基础指令64条,新增的最重要的有两条:
首先是“三操作数指令”(3-Operand Instructions)。x86指令以往只能处理双操作数,而SSE5会提高到三操作数,达到RISC架构的水平,从而把多个简单的指令集整合到更高效的一个单独指令中,提高执行效率。
然后是“熔合乘法累积”(Fused Multiply Accumulate,FMACxx)。该技术可以把乘法和其他算法结合起来,保证之用一条指令就能完成迭代运算,从而简化代码、提高效率,适用于真实图形着色、快速照相渲染、空间化音频、复向量(矢量)数学等场合。
除此之外还有整数乘法累积指令(IMAC,IMADC)、置换与条件移动指令、向量比较与测试指令、精度控制舍入与变换指令等等。
也就是说,AMD当时就已经为推土机的指令集扩展做好了准备,可是事情并没有那么简单。
Intel宣布AVX指令集规范
既然AMD抢先一步,Intel索性弃用了SSE的名称,于2008年4月份公布了AVX(Advanced Vector Extensions,高级矢量扩展)指令集规范,随后开始不断进行更新。AVX指令集提升到256-bit,理论性能可比当前128位CPU提高一倍。在AVX指令集中,同样包含了SSE5指令集的多项新特性,包括3操作数指令/4操作数指令支持,乘加指令以及部分置换指令等,但实现形式与SSE5不同。并且,AVX指令集还加入了一些SSE5中没有的新特性:SIMD浮点指令长度加倍,为旧版SSE指令增加3操作数指令支持,为未来的指令扩展预留大量OpCode空间等。由于新特性众多,再加上intel的强势,众多软件厂商都纷纷宣布支持AVX规范。
SSE5和AVX的交融
SSE5没有相关硬件支持(推土机当时还在娘胎之中),也未能获得软件厂商的青睐,AMD也与2009年5月份正式宣布支持AVX指令集规范。当然,SSE5中的众多特色指令并未摒弃,而是利用AVX规范重写,重新定义为XOP(eXtended Operations指令扩展),CVT16(半精度浮点转换)以及FMA4(4操作数乘加)。
曝光推土机FX-8150 CPU-Z截图,可以看到支持的指令集相当多。
所以简单来说,推土机所支持的指令会相当丰富,即保留了SSE5原有的部分优秀指令集,也对Intel的AVX指令集完全兼容。不过,由于AVX指令集的制定权在Intel手中,未来还可能进行修改。