S N B平台掌上明珠深入分析AVX指令集
指令集是指CPU能执行的所有指令的集合每一指令对应一种操作任何程序最终要编译成一条条指令才能让CPU识别并执行。 CP U依靠指令来计算和控制系统所以指令强弱是衡量CPU性能的重要指标指令集也成为提高CPU效率的有效工具。
CPU都有一个基本的指令集 比如说目前英特尔和AMD的绝大部分处理器都使用的是X86指令集 因为它们都源自于X86架构。但无论CPU有多快 X86指令也只能一次处理一个数据这样效率就很低下毕竟在很多应用中数据都是成组出现的 比如一个点的坐标XYZ和颜色RG B 、多声道音频等。为了提高CPU在某些方面的性能就必须增加一些特殊的指令满足时代进步的需求这些新增的指令就构成了扩展指令集。
英特尔C PU扩展指令集演变
英特尔在1996年率先引入了MMXMulti Media eXtens ions多媒体扩展指令集也开创了SIMDSingle Instruction Multiple Data单指令多数据指令集之先河 即在一个周期内一个指令可以完成多个数据操作MMX指令集的出现让当时的MM XP entium大出风头。
英特尔处理器扩展指令集演变史图片来源后藤弘茂
SSEStreaming SIMD Extensions流式单指令多数据扩展指令集是1999年英特尔在Pentium III处理器中率先推出的并将矢量处理能力从64位扩展到了128位。在Willamette核心的Pentium 4中英特尔又将扩展指令集升级到S SE2 2000年 而S SE3指令集2004年是从Presc ott核心的Pentium 4开始出现。
SSE4 2007年指令集是自SSE以来最大的一次指令集扩展它实际上分成P enryn中出现的S S E4.1和Nehalem中出现的S S E4.2其中S S E4.1占据了大部分的指令共有47条Nehalem中的S SE4指令集更新很少只有7条指令这样一共有54条指令称为SSE4.2。
Sandy Bridge支持AVX指令集
当我们还在惯性的认为英特尔将推出S SE5时不料半路杀出来个程咬金 2007年8月 AMD抢先宣布了SSE5指令集(SSE到SSE4均为英特尔出品)英特尔当即黑脸表示不支持S SE5转而在2008年3月宣布Sandy Bridge微架构将引入全新的AVX指令集 同年4月英特尔公布AVX指令集规范随后开始不断进行更新业界普遍认为支持AVX指令集是Sandy Br idge最重要的进步没有之一。
英特尔AVX指令集简介
AVXAdvanced Vector Extensions高级矢量扩展指令集借鉴了一些AMD SSE5的设计思路进行扩展和加强形成一套新一代的完整S I MD指令集规范。
IDF2010上演示AVX应用
在今年4月的IDF2010上英特尔演示了AVX的应用在两个不同平台上动态跟踪刘翔运行服上的五星红旗结果显示支持AVX的系统视频跟踪的用时为14秒 比不支持AVX的系统快了21秒性能提升了60%以上。
有兴趣的读者可以点击观看AVX应用主题演讲视频时间大概在第33分钟左右。
英特尔AVX的新特性
英特尔AVX指令集主要在以下几个方面得到扩充和加强
·支持256位矢量计算浮点性能最大提升2倍
·增强的数据重排更有效存取数据
·支持3操作数和4操作数在矢量和标量代码中能更好使用寄存器
·支持灵活的不对齐内存地址访问
·支持灵活的扩展性强的VEX编码方式可减少代码
支持256位矢量计算
自1999年SSE将矢量处理能力从64位提升到128位后 SSE系列指令都只能使用128位X MM寄存器这次AVX将所有16个128位XMM寄存器扩充为256位的YMM寄存器从而支持256位的矢量计算。
128位的X MM寄存器扩展到256位的YMM寄存器
这意味着可以同时处理8个32bit的浮点或是一个256bit的浮点在写程序时可以忽略SSE 128bit的限制直接写入一个可以进行多组操作能够充分利用256bit数据位宽的代码理想状态下浮点性能最高能达到前代的2倍水平。
当然有时并不是能完全能利用这256位在大多数情况下这些寄存器的高128位是设为0或者是“LEFTunchanged” 同时所有的S SE/S SE2/S SE3/S S SE3/S SE4指令是被AVX全面兼容的AVX不兼容M MX 因此实际操作的是YMM寄存器的低128位在这一点上与原来的SSE系列指令集无异。
Sandy Bridge最突出的部分
为了满足指令集带来的改进 Lo ad载入单元也要适应一次载入256B it的能力所以增加了一组载入单元完成载入操作并不是单纯的将带宽扩展一倍。这样可以在一个时钟周期内实现256位的乘、加和S huffle运算。
使用新的256位寄存器来提升数据I/O效率更好的标记、传播载入的数据动态的改变数据序列 以此来组织、访问和载入运算所需的数据速度更快效率更高。
AVX增加了很多新的浮点运算指令
AVX还引入了很多新的浮点运算指令浮点运算能力加强不光提升了3D游戏还可以更有效的支持如复杂的flash显示更快的SVG可伸缩矢量图形支持更好的HTM L5效果等等相比用GPU计算来讲功耗更小体积更小成本也小对GPU计算是个不大不小的冲击。
支持3操作数和4操作数
通常一条计算机指令包括有操作码和操作数operands 操作码决定要完成的操作操作数指参加运算的数据及其所在的单元地址。 比如movaps xmm1,xmm0就是一个双操作数 SSE指令movaps为操作码其功能是将xmm0寄存器的内容复制给xmm 1 。
新的3操作数和4操作数格式
AVX指令集改进和加强了原有的在3个操作数指令的编码和语法使之更灵活。 比如要实现xmm 10=xmm9+xmm 1的功能 以前需要两个指令执行movapps xmm 10,xmm9 将xmm9寄存器数据c opy到xmm 10addpd xmm 10,xmm 1 将xmm 1和xmm 10寄存器数据相加并存放到xmm 10
应用AVX指令集新的3操作数方式可以直接由一条指令就能完成vaddpd xmm 10,xmm9,xmm 1
显然AVX三操作数能带来更少的寄存器复制并且代码也更精简。
4操作数虽然是AMD在S S E5中首先提出的但英特尔的AVX也能支持这一方式其最终收益是对AVX 128和AVX 256使用非破坏性语法减少寄存器间的拷贝精简代码增加load/op fusion的机会。movaps xmm0,xmm4movaps xmm 1,xmm2blendvps xmm 1,m 128
比如上面的三条指令利用4操作数可以不需要使用隐含的xmm0直接由下面一条指令完成vblendvp s xmm 1,xmm2,m 128,xmm4
支持灵活的不对齐内存地址访问
CPU在工作时只能按照内部数据位宽长度比如说32bit的整倍数为边界进行内存操作即只能从地址0、 32、 64、 96. ..处进行存取而不能从27、 58、 83等非边界地址处进行。如果一定要取这些非边界地址处的内容则必须用若干个操作将其凑出来 因而大大影响存取效率。
一个结构体的设计长度却并不一定是32的倍数例如一个六个字符的结构其长度为48位如果多个这样的结构在内存中顺着摆放则许多结构的起始地址将不在边界处 因此编译程序总是会将每个结构的尾部都加入一些必要的空白将其凑成32的整数倍这就是边界对齐的基本道理。
传统的指令中 当访问不对齐内存unaligned memory ac c es s时需要相当大的访问周期甚至会有惩罚性延时极大地降低速度。
而在AVX指令集中 以VE X前缀编码的算术指令和内存访问指令在访问内存时更灵活既可访问对齐的内存地址也可访问未对齐的数据。当然访问未对齐数据多少都会有损失但相对传统的指令来说所承受的惩罚要小得多。
革新的VEX指令编码方式
英特尔在2008年春天的I DF上介绍AVX的时候就表示AVX的重点在于采用了称为“VEX(Vector Extension)”革新的指令编码方式。
近日Friendhosting发布了最新的消息,新上线了美国迈阿密的云产品,之前的夏季优惠活动还在进行中,全场一次性45折优惠,最高可购买半年,超过半年优惠力度就不高了,Friendhosting商家的优势就是100Mbps带宽不限流量,有需要的朋友可以尝试一下。Friendhosting怎么样?Friendhosting服务器好不好?Friendhosting服务器值不值得购买?Friendho...
搬瓦工最新优惠码优惠码:BWH3HYATVBJW,节约6.58%,全场通用!搬瓦工关闭香港 PCCW 机房通知下面提炼一下邮件的关键信息,原文在最后面。香港 CN2 GIA 机房自从 2020 年上线以来,网络性能大幅提升,所有新订单都默认部署在香港 CN2 GIA 机房;目前可以免费迁移到香港 CN2 GIA 机房,在 KiwiVM 控制面板选择 HKHK_8 机房进行迁移即可,迁移会改变 IP...
HostKvm也发布了开年促销方案,针对香港国际和美国洛杉矶两个机房的VPS主机提供7折优惠码,其他机房业务提供8折优惠码。商家成立于2013年,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面列出几款主机配置信息。美国洛杉矶套餐:美国 US-Plan1CPU:1core内存:2GB硬盘...