SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是继MMX的扩展指令集。SSE指令集提供了70条新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。

中文名

因特网数据流单指令序列扩展

外文名

Streaming SIMD Extensions

简称

SSE

包括

70条指令

简介

是指令集的简称

简介

SSE是“因特网数据流单指令序列扩展 ( Internet Streaming SIMD Extensions)的缩写。SSE除保持原有的MMX指令外,又新增了70条指令,在加快浮点运算的同时,改善了内存的使用效率,使内存速度更快。它对游戏性能的改善十分显著,按Intel的说法,SSE对下述几个领域的影响特别明显:3D几何运算及动画处理、图形处理(如Photoshop)、视频编辑/压缩/解压(如MPEG和DVD)、语音识别以及声音压缩和合成等。

SSE由一组队结构的扩展组成,用以提高先进的媒体和通信应用程序的性能。该扩展(包括新的寄存器、新的数据类型和新的指令)与单指令多数据(SIMD)技术相结合,有利于加速应用程序的运行。这个扩展与MMX技术相结合,将显著地提高多媒体应用程序的效率。

典型的应用程序是:运动视频,图形和视频的组合,图像处理,音频合成,语音的识别、合成与压缩,电话、视频会议和2D,3D图形。对于需要有规律地访问大量数据的应用程序,也可以从流式SIMD扩展的高性能预取和存储方面获得好处。

SSE定义了一种简单灵活的软件模式。这种新的模式引入了一种新的操作系统可视状态。为了增强并行性,它增加了一组新的寄存器。现存的各种软件,可以在不作修改的情况下继续在增加了SSE的IA处理器上正确运行。SSE引入了一组新的、通用的浮点指令,可对8个128位SIMD浮点寄存器组进行操作。SSE 指令系统使得程序设计人员能够去设计这样一类的算法,即SSE指令和MMX指令两者混合在一起的紧缩单精度浮点运算和紧缩整型运算的算法。SSE 提供了一些新的指令以控制整个MMX数据类型和32位数据类型的可高速缓存性,能够将数据流直接送存储器而不涉及Cache。SSE还提供了能够预取数据的新指令。SSE对于IA编程环境而言,提供了如下的新扩展:

●8个SIMD浮点寄存器(XMM0~XMM7);

●SIMD浮点数据类型(128位紧缩浮点数);

●SSE指令系统。

浮点寄存器

IA的SSE提供了8个128位的通用寄存器,每个寄存器可以直接寻址。这些寄存器都是新的,需要能使用该类寄存器的操作系统支持。

SIMD浮点寄存器保存着紧缩的128位数据。流式SIMD扩展指令访问SIMD浮点寄存器时,直接使用寄存器名XMM0~XMM7。SIMD浮点寄存器可被用以完成数据计算,但不能用来寻址存储器。寻址仍然使用整型寄存器来实现,并且采用标准的IA寻址方式以及通用寄存器名。

MMX寄存器被映射为浮点寄存器。从MMX操作转换到浮点操作需要执行EMMS指令。由于SIMD浮点寄存器是一个独立的寄存器文件,因此MMX指令和浮点指令都能够与流式SIMD扩展指令混合在一起,而不需要执行如EMMS指令那样的特殊操作。

浮点数据类型

IA流式SIMD扩展的基本数据类型是紧缩单精度浮点操作数,即4个32位,单精度浮点(SP ~ FP)数。新的SIMD整型指令可以按紧缩字节、紧缩字或者紧缩双字的数据类型进行操作。新的预取指令是在32字节或者更大的数据规模基础之上工作的,它不管这些数据属于何种类型。4个32位单精度浮点数编号为0~3,第0个数据位于寄存器的第32位之中。

SSE与存储器之间的紧缩数据(单精度的浮点双字)传送,按64位的块或者128位的块来进行。但是,当按紧缩数据类型执行算术操作或者逻辑操作时,却按SIMD浮点寄存器中4个独立的双字并行地进行操作。新的SIMD整型指令遵循MMX指令的惯例,按MMX寄存器的数据类型,而不是按SIMD浮点128位寄存器的数据类型进行操作。

SIMD执行方式

SSE使用单指令多数据(SIMD)技术,按照128位浮点寄存器中的单精度浮点数完成算术和逻辑操作。这种技术通过一条指令并行地处理多个数据元素,以提高软件的速度性能。流式SIMD扩展支持紧缩的单精度浮点数据类型的操作,其SIMD整型指令支持紧缩整型数据类型(字节、字、双字)的操作。SSE 指令能够在保护方式、实地址方式和虚拟8086方式下运行。

数据格式

SSE的紧缩128位数据,编号为0~127。位0为最低有效位(ISB),127为最高有效位( MSB)。当存储数据时,128位的数据总是按“小端”法进行排序,即低地址的字节为低有效字节,高地址的字节为高有效字节。

Pentium II处理器的SIMD浮点指令以32位单精度浮点数据为单位进行操作。SIMD浮点寄存器中的值与存储器中的128位数具有相同的格式。

当存储器存储实型数时,单精度实型值按4个连续的字节存储在存储器中。128位的访问方式用于128位的存储器访问SIMD浮点寄存器之间的128位传送以及所有的逻辑展开/算术指令操作。32位的访问方式则用于32位的存储器访问、SIMD浮点寄存器之间的32位传送以及各种算术指令操作。其中,算术指令有128位操作的,也有32位操作的。

控制状态寄存器

控制/状态寄存器MXCSR用来屏蔽/开放数值异常处理、设置舍入方式、设置清零方式和观察状态标志。该寄存器的内容可以通过LDMXCSR和FXRSTOR指令来加载,通过STMXSCRR和FXSAVE指令将它存入存储器。

寄存器中的位5 ~位0表示是否检测到SIMD浮点数值异常。它们是“粘贴( Sticky)"标志,通过LDMXSCR指令对相应字段写0可以清除这些标志。如果LDMXCSR指令清除了相应的屏蔽位之后又对相应的异常标志置1,不会立即产生异常。只有在下一次SSE扩展处理时,出现了这种异常条件才会发生异常。SSE的每种异常只有一个异常标志,因此一次紧缩数据(4个SP浮点数)操作时,不能为每个数据操作提供异常报告。在同一条指令之内出现多个异常条件时,则修改相关的异常标志并且指示着这些条件中最后一个异常条件所发生的异常。在复位时,这些标志将被清除。

  • 位12~位7组成数值异常屏蔽。如果相应的位置1,则该种异常被屏蔽;如果相应的位被清除,则该种异常开放。在复位时,这些位置全被置为1,意味着屏蔽所有的数值异常。
  • 位14~位13为舍入控制字段。舍人控制除提供定向舍入、截尾舍入之外,还控制着公用的就近舍入方式。在复位时,舍入控制被置为就近舍入。
  • 位15( FZ)用来启动“清洗为0( Flush To Zero)"方式。在复位时,该位被清除,为禁止“清洗为0”方式。MXCSR寄存器的其他位(位31 ~ 位16和位6)定义为保留位并清除为0。试图使用FXRSTOR或者LDMXCSR指令对保留位写入非0值,将引起通用保护异常。 

启动“清洗为0"方式,在下列情况下,会有如下的效果:

(1)回送0结果,且0值带有真实结果的符号;

(2)精度异常标志和下溢异常标志置为1。

在应用程序中,下溢异常出现时,希望能以精度的轻微损失为代价而换得应用程序的快速运行,因此采用“清洗为0"方式。对于“清洗为0”的下溢是这样定义的:当计算结果规格化之前,指数部分处于不可规格化范围,则产生“清洗为0",而不管是否有精度损失。未屏蔽的下溢异常是早于“清洗为0”方式产生的,这就意味着,当下溢异常未被屏蔽时,产生了下溢条件的SSE指令,将调用异常处理程序,而不管“清洗为0"方式是否为“使能”状态。

Intel在Pentium IV处理器中加入了SSE2指令集。与Pentium III处理器采用的SSE指令集相比,目前Pentium IV的整个SSE2指令集共有144条,其中包括原有的68组SSE指令及新增加76组SSE2的指令。全新的SSE2指令除了将传统整数MMX寄存器也扩展成128位(128bit MMX)位,另外还提供了128位SIMD整数运算操作和128位双精密度浮点运算操作。

指令集

概述

SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持,每个寄存器可以存储4个单精度浮点数。使用这些寄存器的程序必须使用FXSAVE和FXRSTR指令来保持和恢复状态。但是在Pentium III对SSE的实现中,浮点数寄存器又一次被新的指令集占用了,但是这一次切换运算模式不是必要的了,只是SSE和浮点数指令不能同时进入CPU的处理线而已。

SSE2是Intel在P4的最初版本中引入的,但是AMD后来在Opteron 和Athlon 64中也加入了对它的支持。这个指令集添加了对64位双精度浮点数的支持。这个指令集还增加了对CPU的缓存的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器Intel后来在其EM64T架构中也增加了对AMD64的支持。

SSE3是Intel在P4的Prescott版中引入的指令集,AMD在Athlon 64的第五个版本中也添加了对它的支持。以及对超线程技术的支持。

SSE的概述图

SSE4指令集将给英特尔下一代平台带来“相当大的视频性能提升”。,其它视频增强技术还包括CVT(明晰视频技术)--英特尔对ATI Avivo的回应--和对UDI的支持。上述两项技术基于英特尔965芯片组。其它英特尔官方文件把CVT技术定义为:支持高级解码、拥有预处理和增强型3D处理能力。 SSE4指令集是Conroe架构所引入的新指令集。这项原本计划应用于NetBurst微架构Tejas核心处理器之上的全新技术也随着它的夭折最终没能实现,这不能不说是个遗憾,但是SSE4指令集出现在了Conroe上又让我们看到了希望。

SSE4指令集共包括16条指令,不过虽然扣肉处理器推出已经有一些时日。也许英特尔是基于特殊的考虑,仅让少数合作软件厂商取得数据,只是这种做法实在很没有说服力就是了,天底下没有哪家处理器厂商,希望自己新增的指令越少人用越好。

不过,从Intel Core微架构针对SSE指令所作出的修改被称之为“Intel Advanced Digital Media Boost”技术来看,未来SSE4将更注重针对视频方面的优化,我们认为SSE4主要改进之处可能将针对英特尔的Clear Video高清视频技术及UDI接口规范提供强有力的支持。这两项技术基于965芯片组,Intel的官方把Clear Video技术定义为:支持高级解码、拥有预处理和增强型3D处理能力。值得一提的是,在SSE4中另一个重要的改进就是提供完整128位宽的SSE执行单元,一个频率周期内可执行一个128位SSE指令。Conroe中SSE的ADDPS(4D 32bit共128bit,单精度加法)、MULPS(4D 32bit共128bit,单精度乘法)和SSE2的ADDPD(2D 64bit共128bit,双精度加法)、MULPD(2D 64bit共128bit,双精度乘法),这四条重要SSE算术指令的吞吐周期都降低到1个周期,真正做到了英特尔宣称的每个周期执行一条128位向量加法指令和一条128位向量乘法指令的能力。

可以说 Conroe的向量单元已经全面引入了流水线化的设计。而支持SSE3的NetBurst微处理器架构虽然提供128位宽执行单元,但仅有一组,性能孰高孰低一目了然。更为重要的是,可见其应用范围相当广泛。

配合完整的128位SSE执行单元,以及庞大的执行单元数目,Conroe处理器可在一个频率周期内,同时执行128位乘法、128位加法、128位数据加载与128位数据回存,或着是4个32位单倍浮点精确度乘法与4个32位单倍浮点精确度加法运算,这将使其更利于多媒体应用。因此,SSE4指令集能够有效带来系统性能上的提升,这一代在众多测试中早已被证实。虽然其不会像当年SSE2指令集出现时那样带来巨大的性能提升,但是其在某些特殊方面的应用还是让我们对它充满了期待。

后续版本

SSE2

SSE2是Intel在Pentium 4处理器的最初版本中引入的,但是AMD后来在Opteron 和Athlon 64处理器中也加入了SSE2的支持。SSE2指令集添加了对64位双精度浮点数的支持。这个指令集还增加了对CPU快取的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器。

SSE3

SSE3是Intel在Pentium 4处理器的 Prescott 核心中引入的第三代SIMD指令集,AMD在Athlon 64的第五个版本,Venice核心中也加入了SSE3的支持。以及对超执行绪技术的支持。

SSSE3

SSSE3是Intel针对SSE3指令集的一次额外扩充,最早内建于Core 2 Duo处理器中。

SSE4

SSE4是Intel在Penryn核心的Core 2 Duo与Core 2 Solo处理器时,新增的47条新多媒体指令集,多媒体指令集,并内建在Phenom与Opteron等K10架构处理器中,不过无法与Intel的SSE4系列指令集相容。

SSE5

SSE5]是AMD为了打破Intel垄断在处理器指令集的独霸地位所提出的,SSE5初期规划将加入超过100条新指令,其中最引人注目的就是三算子指令(3-Operand Instructions)及熔合乘法累积(Fused Multiply Accumulate)。其中,三算子指令让处理器可将一个数学或逻辑函式库,套用到算子或输入资料。借由增加算子的数量,一个 x86 指令能处理二至三笔资料, SSE5 允许将多个简单指令汇整成一个指令,达到更有效率的指令处理模式。提升为三运算指令的运算能力,是少数 RISC 架构的水平。熔合乘法累积让允许建立新的指令,有效率地执行各种复杂的运算。熔合乘法累积可结合乘法与加法运算,透过单一指令执行多笔重复计算。透过简化程式码,让系统能迅速执行绘图着色、快速相片着色、音场音效,以及复杂向量演算等效能密集的应用作业。SSE5最快将内建于AMD下一代Bulldozer核心。

AVX

AVX是Intel的SSE延伸架构,如IA16至IA32般的把暂存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。此架构支持了三运算指令(3-Operand Instructions),减少在编码上需要先复制才能运算的动作。在微码部分使用了LES LDS这两少用的指令作为延伸指令Prefix。

FMA

FMA是Intel的AVX扩充指令集,如名称上熔合乘法累积(Fused Multiply Accumulate)的意思一样。

寄存器

SSE加入新的8个128位寄存器(XMM0~XMM7)。而AMD发表的x86-64延伸架构(又称AMD64)再加入额外8个寄存器。除此之外还有一个新的32位的控制/状态寄存器(MXCSR)。不过只能在64位的模式下才能使用额外8个寄存器。

每个寄存器可以容纳4个32位单精度浮点数,或是2个64位双精度浮点数,或是4个32位整数,或是8个16位短整数,或是16个字符。整数运算能够使用正负号运算。而整数SIMD运算可能仍然要与8个64位MMX寄存器一起运行。

因为操作系统必须要在进程切换的时候保护这些128位的寄存器状态,除非操作系统去引导这些寄存器,否则默认值是不会去激活的。这表示操作系统必须要知道如何使用FXSAVE与FXRSTOR指令才能存储x87与SSE寄存器的状态。而在当时IA-32的主流操作系统很快的都加入了此功能。

由于SSE加入了浮点支持,SSE就比MMX更加常用。而SSE2加入了整数运算支持之后让SSE更加的有弹性,当MMX变成是多余的指令集,SSE指令集甚至可以与MMX并发运作,在某些时候可以提供额外的性能增进。

第一个支持SSE的CPU是Pentium III,在FPU与SSE之间共享运行支持。当编译出来的软件能够交叉的同时以FPU与SSE运作,Pentium III并无法在同一个周期中同时运行FPU与SSE。这个限制降低了指令管线的有效性,不过XMM寄存器能够让SIMD与标量浮点运算混合运行,而不会因为切换MMX/浮点模式而产生性能的折损。

风向

SSE表示南偏东风向。气象观测上,除了用度表示风向外,还用十六方位表示,即将360°划分为16个区间。在风向的十六方位表示中,SSE代表南偏东风向,介于东南和南之间。气象上一般以正北为0°,SSE风向的区间是:146.25°—168.75°。

英语SSE

SSE

abbr.

南东南(south-south-east)

数学SSE

SSE(Sum of Squares for Error)即误差项平方和。反映每个样本各观测值的离散状况,又称为组内平方和或残差平方和。

A股SSE

即 交易所和指数

上海证券交易所Shanghai Stock Exchange

上证指数(SH000001)全称 上海证券交易所股票价格综合指数,即SSE Composite Index

另外还有上证180指数,SSE 180

上证50指数,SSE 50

A股指数,SSE A等指数系列,其中最早编制的为上证综合指数。

获得荣誉

2021年,位居2021福布斯全球企业2000强第634位。[1]

比较

3D Now!是AMD公司用于对抗MMX的指令集技术,而SSE又是Intel公司发布的MMX扩展指令集。那么,3D Now!和SSE相比又如何呢?

首先,它们有很多相似之处:

(1)两种指令集都支持SIMD (单指令多数据流)操作。

(2)都支持在一个时钟周期内执行四次浮点操作。它们在这一性能上旗鼓相当。

(3)都支持“平面”寄存器组结构。

(4)都兼容MMX指令集,可混合使用。也就是说在程序中可以自由地使用这些指令。

(5)都支持数据预取机制,也就是说它们都支持分支预测和推测执行技术。

其次,3D Now!比SSE具有如下优势:

(1)发布时间早,支持者多。3D Now!技术的推出比SSE早了九个多月,拥有超过1000万个K6-2 CPU的用户基础。而且3D Now!在发布时曾广泛征求了3D技术广大厂商的意见,所以得到了包括微软在内的很多软硬件供应商的支持,涌现出了很多专为其优化的软件、游戏。而相比之下,对几经改名的SSE的推出,广大软硬件厂商的反应并不太热烈。

(2)不需要对现存的Windows操作系统做任何修改,因此实现极为容易。3D Now!的性能非常优秀。而SSE与操作系统有关,当时的Windows必须进行修改,以支持SSE的八个新寄存器。所以Windows 98的用户需要使用软件补丁,升级以支持SSE;而Windows NT的用户则必须升级到Windows 2000才行。

第三,SSE比3D Now!具有如下优势:

(1)由于Intel公司在计算机界的地位和Pentium II的巨大出货量,Pentium 的用户一定比 K6-2、Athlon 多得多,所以SSE举足轻重。

(2)据Intel公司说,SSE提高了因特网上的3D网页的开发和运行效率。