|
资料:
是颠覆还是进化?Intel AVX指令集剑指何方
2010年11月09日07:18 来源:天极网
AVX指令集简介
AVX指令集是Sandy Bridge和Larrabee架构新指令集。AVX指令集让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带来的性能提升
Intel全新的发展战略也表明,从2010年开始软件和新指令也将有更好的兼容,而SIMD浮点运算并非决定因素,所以CPU的性能就变得更加困难。而性能增强的同时,SIMD浮点运算在已有编码的基础上也必须会有更大的提升空间,特别是scalar整数运算部分。目前单线程整数运算性能的提升也遇到了瓶颈,本次IDF展会上,确定了这一CPU开发方向的同时也表明了技术的进化趋势。
网友AVX指令集进化说
关于Intel AVX指令集,有网友说它其实是在原有的MMX/SSE指令集基础上的改进版本。和之前的X86指令集模式没有本质上的区别。它是在x86(IA-32/Intel 64)架构的基础上增加了prefix(Prefix),所以实现了新的命令。它就像是Intel X86的MMX/SSE指令集的扩展指令集。
网友AVX指令集颠覆说
很大一部分网友更似乎对于AVX是全新的一种命令格式表示认同。他们认为虽然AVX是基于MMX/SSE指令集基础上做的重大革新,但是增强的AVX指令在指令格式上有很大的变化,它可以让一些更加复杂的质量得以实现,从而提升了X86 CPU的性能。
AVX的256bits SIMD扩展支持是其最具革新的设计部分,同时也代表了指令编码格式的变更。增强的寄存器也使指令头部分不断增加prefix成为了可能。SIMD指令也以SIMDprefix的身份出现,另外Intel 64也增加了8个寄存器从而实现了对于REXprefix的支持。而基于这些在未来Intel可以做的很多,比如:拜托传统X86的不足,提供更加流畅的架构。可以为大幅度扩充指令集提供可能性,为未来的512bits和1024bits的扩展做准备。
笔者点评:
以上网友各自有各自的出发点,进化说的网友是出于新的AVX完全没有摆脱X86的阴影角度出发,这个笔者可以理解。毕竟X86都沿用了这么多年了,有些网友可能处于对新事物的期待。我也希望可以有一种更新进的模式颠覆X86的时代,不过这种可能性实现起来很困难。
某种角度上笔者比较赞同颠覆说网友的看法。AVX并不是x86 CPU的扩展指令集,而是可以实现更高的效率,同时也和CPU硬件兼容性也更好,并且也有着足够的扩展空间,这都和其全新的命令格式系统有关。更加流畅的架构就是AVX发展的方向,换言之,就是摆脱传统x86的不足,在SSE指令的基础上AVX也使SSE指令接口更加易用。我们可以从以下两个方面来分析……
一、AVX革新的指令格式
AVX的256bits SIMD扩展支持是其最具革新的设计部分,同时也代表了指令编码格式的变更。头部增加prefix让扩展成为可能,而增强的寄存器也使指令头部分不断增加prefix成为了可能。这就似乎是由一个房子出来,站到了院子里一般,摆在他面前的是更宽广的世界。
二、AVX最新的编码系统
针对AVX的最新的命令编码系统,Intel也给出了更加详细的介绍,其中包括了大幅度扩充指令集的可能性。比如Sandy Bridge所带来的融合了乘法的双指令支持。从而可以更加容易地实现512bits和1024bits的扩展。而在2008年末到2009年推出的meniikoaCPU“Larrabee(LARAB)”处理器,就会采用AVX指令集。从地位上来看AVX也开始了Intel处理器指令集的新篇章。
基于这些Intel AVX带来的前景似乎非常明朗,下面我们来看看AVX的未来剑指何方。
AVX的未来指令格式
支持16路SIMD指令
VEX是AVX的编码系统简称。由于VEX的支持AVX的长指令可以变得更短,而VEX的payload也有着1字节和2字节两种,VEXprefix为1字节payload的C5和2字节的C1,以及1字节的payload等情况,同样的指令和之前的指令格式比较beru的1字节分指令相比也更短。Intel的Bob Valentine先生在IDF峰会上曾经介绍过AVX带来的蓝图。
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指令编码器的设计专家。
从整体来看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真正到来的时候可能还存在差异。
(来源:原创) |
|