AVX是什么?AVX指令集技术与应用解析

指令集是指CPU能执行的所有指令的集合,每一指令对应一种操作,任何程序最终要编译成一条条指令才能让CPU识别并执行。CPU依靠指令来计算和控制系统,所以指令强弱是衡量CPU性能的重要指标,指令集也成为提高CPU效率的有效工具。

CPU都有一个基本的指令集,比如说目前英特尔和AMD的绝大部分处理器都使用的是X86指令集,因为它们都源自于X86架构。但无论CPU有多快,X86指令也只能一次处理一个数据,这样效率就很低下,毕竟在很多应用中,数据都是成组出现的,比如一个点的坐标(XYZ)和颜色(RGB)、多声道音频等。为了提高CPU在某些方面的性能,就必须增加一些特殊的指令满足时代进步的需求,这些新增的指令就构成了扩展指令集。

英特尔CPU扩展指令集演变

英特尔在1996年率先引入了MMX(MultiMediaeXtensions)多媒体扩展指令集,也开创了SIMD(SingleInstructionMultipleData,单指令多数据)指令集之先河,即在一个周期内一个指令可以完成多个数据操作,MMX指令集的出现让当时的MMXPentium大出风头。

AVX是什么?AVX指令集技术与应用解析

英特尔处理器扩展指令集演变史(图片来源后藤弘茂)

SSE(StreamingSIMDExtensions,流式单指令多数据扩展)指令集是1999年英特尔在PentiumIII处理器中率先推出的,并将矢量处理能力从64位扩展到了128位。在Willamette核心的Pentium4中英特尔又将扩展指令集升级到SSE2(2000年),而SSE3指令集(2004年)是从Prescott核心的Pentium4开始出现。

SSE4(2007年)指令集是自SSE以来最大的一次指令集扩展,它实际上分成Penryn中出现的SSE4.1和Nehalem中出现的SSE4.2,其中SSE4.1占据了大部分的指令,共有47条,Nehalem中的SSE4指令集更新很少,只有7条指令,这样一共有54条指令,称为SSE4.2。

AVX是什么?AVX指令集技术与应用解析

SandyBridge支持AVX指令集

当我们还在惯性的认为英特尔将推出SSE5时,不料半路杀出来个程咬金,2007年8月,AMD抢先宣布了SSE5指令集(SSE到SSE4均为英特尔出品),英特尔当即黑脸表示不支持SSE5,转而在2008年3月宣布SandyBridge微架构将引入全新的AVX指令集,同年4月英特尔公布AVX指令集规范,随后开始不断进行更新,业界普遍认为支持AVX指令集是SandyBridge最重要的进步,没有之一。

英特尔AVX指令集简介

AVX(AdvancedVectorExtensions,高级矢量扩展)指令集借鉴了一些AMDSSE5的设计思路,进行扩展和加强,形成一套新一代的完整SIMD指令集规范。

AVX是什么?AVX指令集技术与应用解析

IDF2010上演示AVX应用

在今年4月的IDF2010上,英特尔演示了AVX的应用,在两个不同平台上动态跟踪刘翔运行服上的五星红旗,结果显示,支持AVX的系统视频跟踪的用时为14秒,比不支持AVX的系统快了21秒,性能提升了60%以上。

有兴趣的读者可以点击观看AVX应用主题演讲视频,时间大概在第33分钟左右。

AVX是什么?AVX指令集技术与应用解析

英特尔AVX的新特性

英特尔AVX指令集主要在以下几个方面得到扩充和加强:

·支持256位矢量计算,浮点性能最大提升2倍

·增强的数据重排,更有效存取数据

·支持3操作数和4操作数,在矢量和标量代码中能更好使用寄存器

·支持灵活的不对齐内存地址访问

·支持灵活的扩展性强的VEX编码方式,可减少代码

支持256位矢量计算

自1999年SSE将矢量处理能力从64位提升到128位后,SSE系列指令都只能使用128位XMM寄存器,这次AVX将所有16个128位XMM寄存器扩充为256位的YMM寄存器,从而支持256位的矢量计算。

AVX是什么?AVX指令集技术与应用解析

128位的XMM寄存器扩展到256位的YMM寄存器

这意味着可以同时处理8个32bit的浮点或是一个256bit的浮点,在写程序时可以忽略SSE128bit的限制,直接写入一个可以进行多组操作,能够充分利用256bit数据位宽的代码,理想状态下,浮点性能最高能达到前代的2倍水平。

当然有时并不是能完全能利用这256位,在大多数情况下,这些寄存器的高128位是设为0或者是“leftunchanged”,同时所有的SSE/SSE2/SSE3/SSSE3/SSE4指令是被AVX全面兼容的(AVX不兼容MMX),因此实际操作的是YMM寄存器的低128位,在这一点上与原来的SSE系列指令集无异。

AVX是什么?AVX指令集技术与应用解析

SandyBridge最突出的部分

为了满足指令集带来的改进,Load载入单元也要适应一次载入256Bit的能力,所以增加了一组载入单元完成载入操作,并不是单纯的将带宽扩展一倍。这样可以在一个时钟周期内实现256位的乘、加和Shuffle运算。

使用新的256位寄存器来提升数据I/O效率,更好的标记、传播载入的数据,动态的改变数据序列,以此来组织、访问和载入运算所需的数据,速度更快效率更高。

AVX是什么?AVX指令集技术与应用解析

AVX增加了很多新的浮点运算指令

AVX还引入了很多新的浮点运算指令,浮点运算能力加强,不光提升了3D游戏,还可以更有效的支持如复杂的flash显示,更快的SVG(可伸缩矢量图形)支持,更好的HTML5效果等等,相比用GPU计算来讲功耗更小,体积更小,成本也小,对GPU计算是个不大不小的冲击。

支持3操作数和4操作数

通常一条计算机指令包括有操作码和操作数(operands),操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。比如movapsxmm1,xmm0就是一个双操作数,SSE指令movaps为操作码,其功能是将xmm0寄存器的内容复制给xmm1。

AVX是什么?AVX指令集技术与应用解析

新的3操作数和4操作数格式

AVX指令集改进和加强了原有的在3个操作数指令的编码和语法,使之更灵活。比如要实现xmm10=xmm9+xmm1的功能,以前需要两个指令执行:

movappsxmm10,xmm9将xmm9寄存器数据copy到xmm10

addpdxmm10,xmm1将xmm1和xmm10寄存器数据相加,并存放到xmm10

应用AVX指令集新的3操作数方式,可以直接由一条指令就能完成:

vaddpdxmm10,xmm9,xmm1

显然AVX三操作数能带来更少的寄存器复制,并且代码也更精简。

4操作数虽然是AMD在SSE5中首先提出的,但英特尔的AVX也能支持这一方式,其最终收益是对AVX128和AVX256使用非破坏性语法,减少寄存器间的拷贝,精简代码,增加load/opfusion的机会。

movapsxmm0,xmm4

movapsxmm1,xmm2

blendvpsxmm1,m128

比如上面的三条指令,利用4操作数,可以不需要使用隐含的xmm0,直接由下面一条指令完成:

vblendvpsxmm1,xmm2,m128,xmm4

支持灵活的不对齐内存地址访问

CPU在工作时只能按照内部数据位宽长度(比如说32bit)的整倍数为边界进行内存操作,即只能从地址0、32、64、96…处进行存取,而不能从27、58、83等非边界地址处进行。如果一定要取这些非边界地址处的内容,则必须用若干个操作将其凑出来,因而大大影响存取效率。

一个结构体的设计长度却并不一定是32的倍数,例如一个六个字符的结构其长度为48位,如果多个这样的结构在内存中顺着摆放,则许多结构的起始地址将不在边界处,因此编译程序总是会将每个结构的尾部都加入一些必要的空白,将其凑成32的整数倍,这就是边界对齐的基本道理。

AVX是什么?AVX指令集技术与应用解析

传统的指令中,当访问不对齐内存(unalignedmemoryaccess)时,需要相当大的访问周期,甚至会有惩罚性延时,极大地降低速度。

而在AVX指令集中,以VEX前缀编码的算术指令和内存访问指令在访问内存时更灵活,既可访问对齐的内存地址,也可访问未对齐的数据。当然访问未对齐数据,多少都会有损失,但相对传统的指令来说,所承受的惩罚要小得多。

革新的VEX指令编码方式

英特尔在2008年春天的IDF上介绍AVX的时候就表示AVX的重点在于采用了称为“VEX(VectorExtension)”革新的指令编码方式。

AVX是什么?AVX指令集技术与应用解析

VEX编码指令解决方案

x86指令集容易扩张,但是每次对于新指令和新数据类型的增加,都会在操作码(opcode)之前增加了一个字节的前缀(prefix),从而实现对扩展的支持。这样的就带来指令集的复杂化和命令长度增加,从而导致二进制的冗余和增加CPU命令解码硬件的复杂性。

VEX编码方式解决了这个问题,VEX的构想,就是压缩prefix中包含的信息,在1个字节的payload中全部包括了prefix的内容,这样缩短指令长度,从而极大地降低了无谓的codesize浪费。并且在今后导入的新的寄存器中,128bits或更长的256bits的数据,也将在payload中压缩。

AVX是什么?AVX指令集技术与应用解析

IntelAVXvs.AMDXOP(图片来源后藤弘茂)

VEXprefix分为2个字节和3个字节的版本,即前缀部分使用C4h和C5h。AMD的XOP指令集采用了类似的方式,XOP前缀字节改成了8Fh,虽然前缀不同,但是payload部分的格式与VEX是相同的。AVX的VEX的编码系统,也反应了英特尔处理器今后的进化趋势,它解决了x86系列CPU在解码能力上的不足。

AVX是SandyBridge最重要的改进

AVX是什么?AVX指令集技术与应用解析

AVX相对SSE带来的处理速度提升

英特尔AVX指令集将矢量处理能力提升到256bit,理论上可以让CPU的浮点性能最大提升两倍,而且革新的VEX编码方式也突破x86在解码方面的瓶颈,非常值得期待。

由于AMD的SSE5和AVX指令集功能类似,并且AVX包含更多的优秀特性,虽然SSE5是要早于AVX宣布的,但在去年AMD还是决定支持AVX,避免让开发者徒增开发难度。同时AMD改写SSE5,重定义为XOP、CVT16和FMA4指令集。AMD有关人员甚至暗示由于受到了AVX指令集影响,Bulldozer的计划从2010年延迟到了2011年。

AVX作为SandyBridge处理器最重要的改进,在几天后将闪亮登场,除硬件支持外,软件上的支持也是必不可少的,所幸的是Windows7SP1已经开始支持英特尔AVX指令集了。

泊祎回收网遵循行业规范,任何转载的稿件都会明确标注作者和来源;

发布者:泊祎回收网,转载请注明出处:https://www.huishou5.net/dianzi/122373.html

(0)
打赏 微信扫一扫 微信扫一扫
泊祎回收网泊祎回收网
上一篇 2021年7月6日
下一篇 2021年7月6日

相关推荐

  • 微星公布Wind Top AE1920一体机详细信息

    微星最近公布了其最新一体机产品的信息,基于IntelPineTrail平台的WindTopAE1920,它采用了最近才发布的AtomD525双核处理器。 该一体机拥有一个光滑的白色…

    2021年12月1日
    228
  • SSHD混合硬盘有什么优点 SSHD混合硬盘优点介绍

    在机械硬盘和固态硬盘之后,市场上又出行了混合硬盘,那么SSHD混合硬盘有什么优点?这里给大家分析下。 众所周知,SSD速度够快,但容量小、价格贵;HDD虽然速度一般,但容量大,够便…

    2021年7月6日
    238
  • 为X79而生,海盗船Dominator系列四通道内存套装上市

    有消息称,支持四通道内存技术的英特尔X79平台即将发布,各个内存厂商自然不会放过这个宣传的机会了。日前海盗船率先推出了四通道内存套装,而且配置的还是旗下单条8GB的Dominato…

    2021年12月2日 电子产品
    272
  • 亚马逊应用商城上线,在华内容服务已初具规模

    亚马逊应用商城总监曾经在去年年底表示,由于中国市场很复杂,亚马逊应用商城在亚洲地区只考虑日本市场,至少在未来一年内都不会进入中国。现在来看,这位总监已经食言了,日前亚马逊应用商城中…

    2021年12月4日
    244
  • 增加扶正器性能的措施

    提高测斜仪测量精度的具体措施。增加扶正器性能良好的扶正器对于垂直孔来讲是提高测量精度较为理想的手段,尤其是对大口径钻孔(热水孔、桩基孔)的测量。但对定向孔、斜孔来讲用扶正器定位效果不理想,因为井斜较大时,探管受力不均衡,因此导致探管在井内位置不居中(或空间位置不确定)。由于没有监测参数,目前的仪器无法对空间位置作出正确的考证。任何一种测斜仪都应该采

    2021年4月26日
    321
  • 联想Y40流处理器数量是多少?支持DirectX 11吗?

    联想Y40流处理器数量是多少 联想Y40流处理器数量是640。 联想Y40采用的是英特尔酷睿i5-4210U处理器,核心主频为1.7GHz,并内建了IntelHDGraphics4…

    2021年8月16日
    242
电话

联系我们

1388-0022-916

在线咨询:点击这里给我发消息

邮件:1395700887@qq.com

工作时间:周一至周日,9:30-18:30,节假日无休

微信
微信
分享本页
返回顶部