INTEL 指令集

SSE(Streaming SIMD Extensions)  历经4代
SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用起到全面强化的作用。SSE指令与3DNow!指令彼此互不兼容,但SSE包含了3DNow!(AMD)技术的绝大部分功能,只是实现的方法不同。SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。
MMX只能在整数上支持SIMD,而SSE指令增加了单精度浮点数的SIMD支持.MMX可以进行同时对2个32位的整数操作,而SSE可以同时对4个32位的浮点数操作。MMX和SSE的一个主要的区别是 MMX并没有定义新的寄存器,而SSE定义了8个全新的128位寄存器,每个寄存器可以同时存放4个单精度浮点数(每个32位长),他们在寄存器中排列顺序见下图。
MMX是和原来的浮点寄存器共享的.一个 浮点寄存器是80位长的,她的低端64位被用做MMX的寄存器.这样,一个应用程序就不能在执行MMX指令的同时进行浮点操作了.同时,处理器还要花掉大量的时钟周期去维护寄存器状态从MMX操作和浮点操作之间的切换。SSE指令集就没有这些限制了。由于她定义了全新的寄存器,应用程序可以在进行整数SIMD操作(MMX)的同时进行浮点数的SIMD操作(SSE),同样,SSE还可以在执行浮点数的非SIMD操作的同时进行SIMD操作。
SSE和SSE2的指令系统非常相似,SSE2比SSE多的仅是少量的额外浮点处理功能、64位浮点数运算支持和64位整数运算支持。
 
    SSE为什么会比传统的浮点运算更快呢?因为它使用了128位的存储单元,这对于32位的浮点数来讲,是可以存下4个的,也就是说,SSE中的所有计算都是一次性针对4个浮点数来完成的。
 
    虽然SSE从理论上来讲要比传统的浮点运算会快,但是所受的限制也很多,首先,虽然它执行一次相当于四次,会比传统的浮点运算执行4次的速度要快,但是它执行一次的速度却并没有想象中的那么快,所以要体现SSE的速度,必须有Stream做前提,就是大量的流数据,这样才能发挥SIMD的强大作用。其次,SSE支持的数据类型是4个32位(共计128位)浮点数集合,就是C、C++语言中的float[4],并且必须是以16位字节边界对齐的。(16*8)因此这也给输入和输出带来了不少的麻烦,实际上主要影响SSE发挥性能的就是不停地对数据进行复制以适用应它的数据格式.
SSE指令可以说是将Intel的MMX和AMD的3DNow!技朮相结合的产物,由于3DNow!使用的是浮点寄存方式,因而无法较好地同步进行正常的浮点运算。而SSE使用了分离的指令寄存器,从而可以全速运行,保证了与浮点运算的并行性。尤其是两者所使用的寄存器差异颇大─3DNow!是64位,而SSE是128位。同时为了充分发挥SSE的优势,Intel引进了新的“处理器分离模式”以提高浮点运算速度。
比如玩Quake时,3D对象均由多边形构成,而这些多边形以一系列点的形式保存。每个点都有对应的3轴坐标。如限制成只用整数,便不能精确地表示这些位置(如每个坐标轴使用16位,那么只能得到65536(2~16)个坐标点),造成图形显示非常糟糕。
要发挥SSE的速度优势,要满足以下条件:使用DirectX 6 API开发应用程序;使用支持SSE的图形驱动程序;使用支持“处理器分离模式”的操作系统等。由于SSE要求软件的数据结构重写,又比“3D NOW!”晚推出了9个多月,因此市场上使用“3D NOW!”的系统装机量远远超过SSE。基于以上种种原因,SSE一直没有得到充分的发展。直到Pentium 4发布之后,开发人员看到使用SSE指令之后,程序执行性能将得到极大的提升,于是Intel又在SSE的基础上推出了更先进的SSE2指令集。
4个单精确浮点数(SSE)·2个双倍精确浮点数(SSE2)·16个字节数(SSE2)·8个字组(word)数(SSE2)
·4个双倍字组数(SSE2)·2个四倍字组数(SSE2)·1个128位长的整数(SSE2)
  由于SSE2可供选择的数据型态很多,而且无疑地相当有用。 因此,当时Intel 极希望软件开发者能用SSE2 的双倍精确浮点指令来取代旧有的 x86 浮点指令,如此一来 Intel所称 Pentium4是当时FPU 性能最强的处理器这项谣言,最后也就变成了事实。在相关测试中,SSE2对于处理器的性能的提升是十分明显的,虽然在同频率的情况下,Pentium 4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以经过SSE2优化后的程序Pentium 4的运行速度要明显高于Athlon XP。而AMD方面也注意到了这一情况,在随后的K-8系列处理器中,都加入SSE2指令集。
SSE3:
此前MMX包含有57条命令,SSE包含有50条命令,SSE2包含有144条命令,SSE3包含有13条命令
第一层中的指令是“数据传输命令”,只有一条指令:FISTTP,它有利于x87浮点转换成整数,并可以大大提高优化的效率。

  第二层中的指令是“数据处理命令”,一共有五条,分别是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。这些指令可以简化复杂数据的处理过程,由于未来数据处理流量将会越来越大,因此Intel在这里应用的指令集最多、达到了五条。

  第三层中的指令是“特殊处理命令”,也只有一条:LDDQU。在这条指令主要针对视频解码,用来提高处理器对处理媒体数据结果的精确性。

  第四层中的指令是“优化命令”,一共有四条指令,分别是HADDPS,HSUBPS,HADDPD,HSUBPD,它们可以对程序起到自动优化的作用。这些指令对处理3D图形相当有用。

  第五层中的指令是“超线程性能增强”,一共有两条针对线程处理的指令:MONITOR, MWAIT,这有助于增加Intel超线程的处理能力、大大简化了超线程的数据处理过程。

  从技术上来看,SSE3对于SEE2的改进非常有限,因此它为Prescott所带来的性能提升相当有限,它的优势仍体现在视频解码方面—Intel宣称如果在数据编码算法使用LDDQU指令,那么影象压缩速度可以提升10%左右。在当时来看,SSE3仍属于最先进的指令集,因此AMD、全美达后来也在它的处理器中加入对SSE3指令集的支持。
配合完整的128位SSE执行单元,以及庞大的执行单元数目,Conroe处理器可在一个频率周期内,同时执行128位乘法、128位加法、128位数据加载与128位数据回存,或着是4个32位单倍浮点精确度乘法与4个32位单倍浮点精确度加法运算,这将使其更利于多媒体应用。
   1997年 MMX 使用了8个64位的寄存器------8个字节、4个单字、2个双字(风云的“游戏之旅,我的编程感悟”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值