Sandy Bridge和Larrabee架构新指令集
  Intel的微架构也进入了全速发展的时期,在刚刚结束的IDF峰会上Intel公司就发布了2010年的RoadMap。2010年Intel也将发布全新的处理器微架构Sandy Bridge,其中全新增加的指令集也将带来CPU性能的提升。
  Intel公司将为Sandy Bridge带来全新的指令扩展集Intel Advanced Vector Extensions (Intel AVX)。AVX是在之前的128bit扩展到和256bit的SIMD(Single Instruction, Multiple Data)。而Sandy Bridge的SIMD演算单元扩展到256bits的同时数据传输也获得了提升,所以从理论上看CPU内核浮点运算性能提升到了2倍。
  
  全新指令集Intel AVX概要
  
  2倍浮点运算性能
  Intel全新的发展战略也表明,从2010年开始软件和新指令也将有更好的兼容,而SIMD浮点运算并非决定因素,所以CPU的性能就变得更加困难。而性能增强的同时,SIMD浮点运算在已有编码的基础上也必须会有更大的提升空间,特别是scalar整数运算部分。目前单线程整数运算性能的提升也遇到了瓶颈,本次IDF展会上,确定了这一CPU开发方向的同时也表明了技术的进化趋势。
  
  2008年之后的Intel指令集
  
  Intel指令集进化图
  Intel AVX指令集,在SIMD计算性能增强的同时也沿用了的MMX/SSE指令集。不过和的MMX/SSE的不同点在于增强的AVX指令,从指令的格式上就发生了很大的变化。x86(IA-32/Intel 64)架构的基础上增加了prefix(Prefix),所以实现了新的命令,也实现了更加复杂的指令得以实现,从而提升了x86 CPU的性能。
  AVX并不是x86 CPU的扩展指令集,而是可以实现更高的效率,同时也和CPU硬件兼容性也更好,并且也有着足够的扩展空间,这都和其全新的命令格式系统有关。更加流畅的架构就是AVX发展的方向,换言之,就是摆脱传统x86的不足,在SSE指令的基础上AVX也使SSE指令接口更加易用。
  针对AVX的最新的命令编码系统,Intel也给出了更加详细的介绍,其中包括了大幅度扩充指令集的可能性。比如Sandy Bridge所带来的融合了乘法的双指令支持。从而可以更加容易地实现512bits和1024bits的扩展。而在2008年末到2009年推出的meniikoaCPU“Larrabee(LARAB)”处理器,就会采用AVX指令集。从地位上来看AVX也开始了Intel处理器指令集的新篇章。

  AVX革新的指令格式
  AVX的256bits SIMD扩展支持是其最具革新的设计部分,同时也代表了指令编码格式的变更。x86(IA-32/Intel 64)指令,在op code之前增加了一个字节的prefix,从而实现了扩展的支持。增强的寄存器也使指令头部分不断增加prefix成为了可能。SIMD指令也以SIMDprefix的身份出现,另外Intel 64也增加了8个寄存器从而实现了对于REXprefix的支持。
  IA-32/Intel 64的另外一个优势就是对于prefix的扩展,不过也存在一些不足,比如prefix指令格式变得更加复杂,而指令也更长等。因此IA-32/Intel 64的指令如果要实现decoding将增加难度,而decoding的同时也将带来电力的消耗。实际上Core Microarchitecture(Core MA)所遇到的最大瓶颈,就是指令的puridekodo和fetch。而prefix的不断增加也使指令的结尾产生了新的问题。
  AVX的指令编码系统的产生,同时而越是SSE指令进化的必然。(IA-32/Intel 64)SIMD指令最初是3个字节,不过对于追加的数据类型在这基础之上,64-bit增加了8个1字节的Prefix寄存器,并且在命令头处增加了1字节。Intel的Bob Valentine先生(CPU Architect, Mobility Group)对此进行了说明。
  AVX对于变更编码指令编码格式方面,也有了解决办法,其宗增加了1个重叠字节的prefix就成为低效率的解决方案,而VEX(Vector Extension)的prefix以及1-2个字节的连续VEX的payload(Payload)系统,也成为相对完美的解决办法。
  VEX编码的构想,就是压缩Prefix中包含的信息,在1个字节的payload中全部包括了prefix的内容。并且在今后导入的新的寄存器中,128bits或更长的256bits的数据,也将在payload中压缩。
  
  AVX的未来指令格式
  支持16路SIMD指令
  由于VEX的支持,AVX的长指令可以变得更短,而VEX的payload也有着1字节和2字节两种,VEXprefix为1字节payload的C5和2字节的C1,以及1字节的payload等情况,同样的指令和之前的指令格式比较beru的1字节分指令相比也更短。
  实际上1字节的payload也并不会全部载入,也有着2个版本的VEX,4字节版本和5字节版本。而对于大部分legacy编码,即使是64bits的指令,也可以支持4字节指令寄存。而1字节指令就变得更加短小了。 而几个全新的指令也使用了新的寄存器,所以增加了5字节的版本。Valentine先生对VEX进行了相关的介绍。
  
  Intel的Bob Valentine先生。
  VEX编码格式的另外一个重要点就是有着强大的指令集扩展支持,而对于同样命令长度的指令也更加容易地实现,这样就使不断增长的命令兼容变得更加容易。
  其中5字节版的payload
  ,也专门有着指令扩展的3比特空间,而3bits也以为着1000条新指令的支持,全新的ficha和新的寄存器以及vector也都可以更加容易地增加。
  除了VEX指令格式外还有着1,024bits的SIMD的支持。同时多重prefix的支持和之前的beru比较,全部的指令在格式上都更小,之前的1字节C5通过C4,也可以决定op code的长度。而从硬件上来看的话,指令的puridekodo实现也更加容易。

  VEX解决x86 CPU瓶颈
  AVX的VEX的编码系统,从某一侧面上也反应了Intel处理器今后的进化趋势,因为它解决了x86系列CPU在decoding上的不足。Core MA有着4条命令的执行通道,不过front end却存在着不足,首先L1缓存fetch端口也有着16字节的长度。而fetch的命令次数也被得到了限制。首先IA-32/Intel 64命令的puridekodo也有着先天的瓶颈,而操作数和地址长度的指令prefix“LCP(Length Changing Prefixes),使得puridekodo变得更慢,所以必须要改变长标注的算法。
  
  
  fetch&puridekodo的最优化设计
  Core MA在puridekodo&decoding方面的不足,从根本上来看是IA-32/Intel 64指令集架构本身的问题。IA-32/Intel 64架构为了增强长命令而增设的缓存,使命令fetch拜年的更长,并且更加复杂的命令格式也由此产生。RISC(Reduced Instruction Set Computer)的命令格式也决定了其长度,decoding虽然容易,但x86系CPU也就要以牺牲资源为代价,同时也带来了电力的额外消耗。
  实际上最新的Nehalem也有着类似Core MA的不足,从某种程度上来看也延续了其不足,如果明确了这一问题的话,那么Nehalem就必须要改进,其中16bytesfetch和puridekodo等方面的改进就势在必行了。而改进所需要的庞大晶体管增加,也会带来功耗的增加。
  
  Nehalem的fetch&decoding
  Nehalem的设计其实存在着疑问,不过从VEX格式来分析的话其意图就非常明确了。Intel在完善了CPU的puridekodo&decoding硬件设计的同时,必须要改进指令格式本身。fetch的指令变短的同时,指令的标注却更加复杂了,而解决的唯一办法就是改进指令格式。

  在充分考虑硬件方面设计后,intel做出了VEX格式开始的决策。IDF上Valentine先生也对VEX格式进行了详细的说明。他是Core MA的front end的fetch开发以及decoding的高级架构师,同时也是IA-32/Intel 64指令编码器的设计专家。
  
  Nehalem结构图
  
  Core Architecture结构图
  从整体来看AVX指令的话,可以看出intel公司都CPU开发的全部脉络,Intel公司在对比beru的话,产生改进Drastic的指令集的微架构的想法就变得顺理成章了,如果分析原因的话,那就是微架构本身的改进了。全新的CPU必然要有更好的性能表现,想要提高CPU的性能,那么指令集是最行之有效的手段。
  AVX扩展指令包含了SSE指令,这也有助于像AVX时代的过度。日前的SSEVEX格式也并不需要绝对的转换过程。Intel公司的Benny Eitan先生也提到,出于整体的考虑,Intel公司对于AVX普及的进行并不会泰国迅速,并且也不会立刻停止SSE时代。

  Sandy Bridge也增强了×××的支持,和之前的IA-32/Intel 64prefix相比,decoding也有了全新的VEX格式的支持。其中VEX指令对于decoding的命令数的支持上更加强劲,同时VEX在执行效率上也更加出色。不过这些和Sandy Bridge真正到来的时候可能还存在差异。
  
  Intel指令集扩展进化图