在Sandy Bridge处理器中,最大的改进要算是增加了全新的AVX指令集——Advanced Vector Extensions,高级矢量扩展。这个指令集的增加是X86处理器中的重要内容,不仅仅是提供了更为良好的性能,同时也是对现有指令集的整合与优化。
介绍AVX指令集之前,先要引入一个向量的概念。所谓向量,就是多个标量的组合,通常意味着SIMD(单指令多数据),就是一个指令同时对多个数据进行处理,达到很大的吞吐量。早在1996年,Intel就在X86架构上应用了MMX(多媒体扩展)指令集,那时候还仅仅是64位向量。到了1999年,SSE(流式SIMD扩展)指令集出现了,这时候的向量提升到了128位。
如今,Sandy Bridge的AVX将向量化宽度扩展到了256位,原有的16个128位XMM寄存器扩充为256位的YMM寄存器,可以同时处理8个单精度浮点数和4个双精度浮点数。换句话说,Sandy Bridge的浮点吞吐能力可以达到前代的两倍。不过现在,AVX的256位向量还仅仅能够支持浮点运算。不过AVX的特别之处在于,它可以应用128位的SIMD整数和SIMD浮点路径。
AVX指令集是和Sandy Bridge微架构紧密结合的,因此,微架构的浮点寄存器也要从128位扩展到256位,此外,Load单元也要适应一次载入256位的能力,Sandy Bridge没有直接扩展原有Load单元的位宽,而是通过增加了一个Load单元来达到256bit Load的能力。
在进行新性能扩展的同时,AVX指令集的出现对于原有的X86指令集也进行了优化与重新组合——这主要源于AVX指令集新的操作码编码方式。AVX指令集的编码方式叫做VEX(Vector Extension),其主要用途是缩短指令长度,降低无谓的代码冗余,并且也降低了对解码器的压力,实现的方式也很特别——压缩各式各样的Prefix前缀,集中到一个比较固定的字段中,从而达到了精简指令集的目的。