更新时间:2023-07-21 22:23
AVX指令集是Sandy Bridge和Larrabee架构下的新指令集。AVX是在之前的128位扩展到256位的单指令多数据流。而Sandy Bridge的单指令多数据流演算单元扩展到256位的同时数据传输也获得了提升,所以从理论上看CPU内核浮点运算性能提升到了2倍。
Intel的微架构进入了全速发展的时期,在2010年4月结束的IDF峰会上Intel公司就发布了2010年的RoadMap。2011年1月Intel发布了处理器微架构Sandy Bridge,其中全新增加的指令集也将带来CPU性能的提升。
Intel公司将为Sandy Bridge带来全新的指令扩展集Intel Advanced Vector Extensions (Intel AVX)。
Intel全新的发展战略也表明,从2010年开始软件和新指令也将有更好的兼容,而单指令多数据流浮点运算(即实数运算)并非决定因素,所以CPU的性能就变得更加困难。而性能增强的同时,单指令多数据流浮点运算在已有编码的基础上也必须会有更大的提升空间,特别是scalar整数运算部分。单线程整数运算性能的提升也遇到了瓶颈,本次IDF展会上,确定了这一CPU开发方向的同时也表明了技术的进化趋势。
AVX并不是x86 CPU的扩展指令集,可以实现更高的效率,同时和CPU硬件兼容性也更好,并且也有着足够的扩展空间,这都和其全新的命令格式系统有关。更加流畅的架构就是AVX发展的方向,换言之,就是摆脱传统x86的不足,在SSE指令的基础上AVX也使SSE指令接口更加易用。
针对AVX的最新的命令编码系统,Intel也给出了更加详细的介绍,其中包括了大幅度扩充指令集的可能性。比如Sandy Bridge所带来的融合了乘法的双指令支持。从而可以更加容易地实现512位和1024位的扩展。而在2008年末到2009年推出的meniikoaCPU“Larrabee(LARAB)”处理器,就会采用AVX指令集。从地位上来看AVX也开始了Intel处理器指令集的新篇章。
AVX的256位单指令多数据流扩展支持是其最具革新的设计部分,同时也代表了指令编码格式的变更。x86(IA-32/Intel 64)指令,在op code之前增加了一个字节的prefix,从而实现了扩展的支持。增强的寄存器也使指令头部分不断增加prefix成为了可能。单指令多数据流指令也以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-位 增加了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的内容。并且在今后导入的新的寄存器中,128位或更长的256位的数据,也将在payload中压缩。
由于VEX的支持,AVX的长指令可以变得更短,而VEX的payload也有着1字节和2字节两种,VEXprefix为1字节payload的C5和2字节的C1,以及1字节的payload等情况,同样的指令和之前的指令格式比较beru的1字节分指令相比也更短。
实际上1字节的payload也并不会全部载入,也有着2个版本的VEX,4字节版本和5字节版本。而对于大部分legacy编码,即使是64位的指令,也可以支持4字节指令寄存。而1字节指令就变得更加短小了。 而几个全新的指令也使用了新的寄存器,所以增加了5字节的版本。Valentine先生对VEX进行了相关的介绍。
VEX编码格式的另外一个重要点就是有着强大的指令集扩展支持,而对于同样命令长度的指令也更加容易地实现,这样就使不断增长的命令兼容变得更加容易。
其中5字节版的payload
,也专门有着指令扩展的3比特空间,而3位也意味着1000条新指令的支持,全新的ficha和新的寄存器以及vector也都可以更加容易地增加。
除了VEX指令格式外还有着1,024位的SIMD的支持。同时多重prefix的支持和之前的beru比较,全部的指令在格式上都更小,之前的1字节C5通过C4,也可以决定op code的长度。而从硬件上来看的话,指令的puridekodo实现也更加容易。
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变得更慢,所以必须要改变长标注的算法。
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及MMX时代。
Sandy Bridge也增强了解码器的支持,和之前的IA-32/Intel 64prefix相比,decoding也有了全新的VEX格式的支持。其中VEX指令对于decoding的命令数的支持上更加强劲,同时VEX在执行效率上也更加出色。不过这些和Sandy Bridge真正到来的时候可能还存在差异。
AMD新推出FMA指令也 是 AVX 指令集中的一部分。
AMD 的FMA 指令是3 operands(操作数)的,被称为 FMA3,而AMD的FMA是4 operands 的,被称为 FMA4,AMD认为4 operands 更能提供效率。更加细化!