标题：SSE4指令集
简介
SSE4指令集的英文全称是：Streaming SIMD Extensions 4，是英特尔自从SSE2之后对ISA扩展指令集最大的一次的升级扩展。新指令集增强了从多媒体应用到高性能计算应用领域的性能，同时还利用一些专用电路实现对于特定应用加速。
指令数目
而最终推出的SSE指令集也就是所谓胜出的"互联网SSE"指令集。SSE指令集包括了70条指令，其中包含提高3D图形运算效率的50条SIMD（单指令多数据技术）浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用起到全面强化的作用。S SE指令与3DNow!指令彼此互不兼容，但SSE包含了3DNow!技术的绝大部分功能，只是实现的方法不同。SSE兼容MMX指令，它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。[1]　
从指令数目上看，SSE4指令增加了的指令改进了整数和浮点操作，支持DWORD和QWORD操作，新的单精度FP操作、快速寄存器操作、面向性能优化的内存操作等等，包括了图形、图像、数据装载各方面的革新，因此称其为SSE2以来最大的指令集变动也是不为过的。利用支持SSE4指令集的编译器编译之后，包括图形/图像处理、视频处理、2D/3D创作、多媒体、游戏、内存敏感负载、高性能计算等应用都会受益。
版本
SSE4指令集将分为两个版本：4.1和4.2，SSE4.1版本随着45nm Penryn发布，而SSE4.2版本将会随着下一代架构Nehalem发布，4.1将包括47条指令，4.2将包括7条指令。[2]
实际上，SSE4指令集并不能完全说是一个独立的新技术，因为它是集成在英特尔45纳米处理器之中，可以说是处理器众多新技术之一。但之所以将其单独拿出来为大家解析，主要是考虑到随着人们生活水平的提高和奥运的临近，大家对于高清视频播放和解压的要求也越来越高。因此在本页中，编辑将详细为大家介绍SSE4指令集的特点，并加以相应的测试。
内容
SSE4：全名为Streaming SIMD Extension 4，被视为继2001年以来最重要的媒体指令集架构的改进，除扩展Intel 64指令集架构外，还加入有关图形、视频编码及处理、三维成像及游戏应用等指令，令涉及音频、图像和数据压缩算法的应用程序大幅受益。  新增指令据了解，SSE4将分为4.1版本及4.2版本，4.1版本将会首次出现于Penryn处理器中，共新增47条指令，主要针对向量绘图运算、3D游戏加速、视像编码加速及协同处理加速动作，指令如右图：
据Intel官方数据显示，近期与多间软件公司全力合作，2008 年第一季将有21款软件支持SSE4指令集，包括影像编码及播放软件、数字影像内容处理软件及3D游戏核心，性能提高20%至110%不等。
主要构成 
IntelSSE4 由一套全新指令构成，旨在提升一系列应用程序的性能和能效。Intel SSE4 构建于英特尔64 指令集架构 (Intel64 Instruction Set Architecture) (ISA)，该架构是开发 32 位和 64 位应用最为广泛应用的电脑架构。Intel SSE4 是英特尔与其独立软件开发商 (ISV) 团体精诚合作的成果，它可以支持开发人员轻松改进产品，同时保持必要的应用级兼容性，以适应处理器不断迭代的需求。
自1999年多媒体指令集问世以来，已经经过了九年的时间。其中1999年SSE指令集诞生，包含70条指令。2000年为SSE2指令集，包含有144条指令。2004年为SSE3指令集，包含13条指令。2006年为SSSE3指令集，包含32条指令。SSE4延续了多媒体指令集的发展。SSE4指令集中有14条用作视频加速，32条指令适用于图形基本指令，还有一条名为Stroaming Load，可使存取内存的速度度提升9倍。应用范围为视频制作、便携式视频设备、视频检索、图形和图像、游戏和物理过程以及芯片加速器等。在对一段720p规格的H.264高品质电影短片进行编码测试时，集成SSE4指令集的Yorkfield 3.33GHz处理器比QX6700处理器时间缩短了约40%。[3]
　　主要分类
Intel SSE4 包含 54 条指令，主要分为两类：矢量化编译器和媒体加速器，以及高效加速字符串和文本处理。
矢量化编译器和媒体加速器可提供高性能的编译器函数库，如封包（同时使用多个操作数）整数运算和浮点运算，可生成性能优化型代码。此外，它还包括高度优化的媒体相关运算，如绝对差值求和、浮点点积和内存负载等。矢量化编译器和媒体加速器指令可改进音频、视频和图像编辑应用、视频编码器、3D 应用和游戏的性能。
高效加速字符串和文本处理包含多个压缩字符串比较指令，允许同时运行多项比较和搜索操作。由此受益的应用包括数据库和数据采掘应用，以及那些利用病毒扫描和编译器等分析、搜索和模式匹配算法的应用。
Penryn 支持 47 条 IntelSSE4 指令，包括矢量化编译器和媒体加速器指令。未来的英特尔处理器将支持其余指令，而软件也将能从程序的角度检测出处理器支持哪些 Intel SSE4 指令。
从指令数目上看，SSE4指令增加了的指令改进了整数和浮点操作，支持DWORD和QWORD操作，新的单精度FP操作、快速寄存器操作、面向性能优化的内存操作等等，包括了图形、图像、数据装载各方面的革新，因此称其为SSE2以来最大的指令集变动也是不为过的。利用支持SSE4指令集的编译器编译之后，包括图形/图像处理、视频处理、2D/3D创作、多媒体、游戏、内存敏感负载、高性能计算等应用都会受益。SSE4指令集将分为两个版本：4.1和4.2，SSE4.1版本随着45nm Penryn发布，而SSE4.2版本将会随着下一代架构Nehalem发布。[4]
Penryn处理器SSE4指令集解析
Penryn处理器搭载了最新的SSE4指令集，SSE4(Streaming SIMD Extensions 4)是英特尔自从SSE2之后对ISA扩展指令集最大的一次的升级扩展，它将会随着Penryn处理器陆续应用于台式机平台、移动平台和服务器中……
Penryn处理器搭载了最新的SSE4指令集，SSE4(Streaming SIMD Extensions 4)是英特尔自从SSE2之后对ISA扩展指令集最大的一次的升级扩展，它将会随着Penryn处理器陆续应用于台式机平台、移动平台和服务器中。据目前所致，SSE4包括大约50条新指令，Penryn通过这些新指令集，增强了从媒体应用到高性能计算应用领域的性能，同时还利用一些专用电路实现对于特定应用加速。
从指令数目上看，SSE4的47条指令增加了的指令改进了整数和浮点操作，支持DWORD和QWORD操作，新的单精度FP操作、快速寄存器操作、面向性能优化的内存操作等等，包括了图形、图像、数据装载各方面的革新，因此称其为SSE2以来最大的指令集变动也是不为过的。利用支持SSE4指令集的编译器编译之后，包括图形/图像处理、视频处理、2D/3D创作、多媒体、游戏、内存敏感负载、高性能计算等应用都会受益。
SSE4指令集的具体指令如下图所示，按照目前的资料，SSE4指令集还将分为两个版本：4.1和4.2，SSE4.1版本将随着45nm Penryn发布，而SSE4.2版本将会随着Penryn的下一代Nehalem发布，4.1将包括47条指令，4.2将包括7条指令，因此下图的指令数目实际上并不是47，未来的SSE4.2指令数目也可能会有变动。
对于Nehalem的SSE4.2，Intel的Gelsinger介绍说，这7条指令集的用途各有不同，比如有面向CRC-32和POP Counts等特定应用的，有特别针对XML等的流式指令。Gelsinger称，新指令集可以将256条指令合并在一起执行，从而让XML类工作的性能提高3倍。
SSE4——Penryn搭载的SSE4.1指令集主要分为三个部分，分别是SSE4视频编码加速部分、SSE4图形加速部分和SSE4流加载部分，其中SSE4视频编码加速部分包括了14条指令，用于加速4x4绝对差和、子像素过滤一击数据查找方面的性能。
在进行视频编码时，需要进行大量的Motion Estimation(动态预测)，动态预测是视频编码过程中极其重要的一个环节，它的算法效率对整个编码效率有很大的影响，而这个动态预测需要进行大量的SAD(Sums of Absolute Difference，差分绝对值和)的运算，该运算是大部分视频编码算法中运动估计一步常采用的方法。SAD算法将会在相邻两个连续视频帧中找出一个大块的运动情况，以纪录其运动数据代替纪录像素数据而节约存储容量、压缩视频。为此，SAD需要计算两个大块中每一组对应的像素值之间绝对差值的累加和。这本身就是一个非常复杂的大数据量运算动作，即使依靠SIMD指令的一条指令就处理大量数据的优势，要组合成SAD操作代码也需要大量的指令。
现在，SSE4指令集内特别加入了SAD加速运算指令，只需要一条指令就可以快速高效地完成这些工作。例如，在SSE4之前，一个SAD工作代码如下：
非常的冗长繁琐，而在有了SSE4之后，这些指令就可以简化为一条指令：
MPSADBW xmm0,xmm1,0
指令集架构
据了解，SSE4 指令集全名为全名为Streaming SIMD Extension4，被视为继2001年以来最重要的媒体指令集架构的改进，除扩展 Intel64 指令集架构外，还加入有关图形、视频编码及处理、三维成像及游戏应用等指令，令涉及音频、图像和数据压缩算法的应用程序大幅受益。在影像编码及播放软件方面，除了DivX、Pegasys TMPEGenc Xpress及Microsoft Media Encoder已支持SSE4，但在 2008 年第一季将有Mainconcent H.264 Encoder、Arcsoft Video Cleaner 、Beehive WASP 3D 、CyberLink Power DVD Ultra 、CyberLink Power Director 、Intervideo DVD Copy 、Mainconcent H.264Decoder 、Sony H.264 Encoder/Decoder 及 Unlend DMF6 追加支持 SSE4，令 Intel 45 nm Core2处理器在影像编码及播放效能，有更大优势。在数码内容处理软件方面，将有Sony Media SW Vegas 8.0b、Adobe Premiere Pro CS3、3ivx Video Author、 nlet's Fathom、Arcsoft Media Converter、Ulead Video Studio及Image Anlyzer追加SSE4支持，预计在2008年第一季推出。在游戏方面，将有2款游戏支持SSE4，包括NC Soft Lineage II及Scale Form，但Intel不讳言SSE4对于游戏的增长比较细，相信不会有太多软件公司在游戏核心引擎内加入SSE4支持。根据Intel最新规划，SSE4 将分为4.1版本及4.2版本，4.1版本将会首次出现于Penryn处理器中，共新增 47 条指令，主要针对向量绘图运算、3D 游戏加速、视像编码加速及协同处理加速动作，下一代 45 nm Nelahem将会追加SSE4.2 版本，合共 54 条指令。[5]
历史发展
发展历史首先还是让我们回顾一下英特尔处理器集成指令的历史，之后再引出SSE4指令集的诞生。自英特尔奔腾MMX处理器开始，处理器新加入了SIMD（Single Instruction Multiple Data）多媒体指令集。该指令集可以把多批次的指令组编辑成为一条单一的指令，从而达到提升数据处理的能力。集成MMX指令的奔腾处理器主要用作提升多媒体数据的处理能力，共有57条指令。
后来，英特尔于1999年发布了基于MMX指令的SSE指令集，全名Streaming SIMD Extensions。首颗支持SSE产品Pentium III处理器，除新增70条指令之外，还进一步提升了多媒体数据的处理能力，最重要的是解决了MMX指令与浮点指令不能同时处理的问题。而随后  在2001年发布的SSE2指令集，又在原来的基础上增加了144条新指令。其中除了主要负责64位双精度浮点数及整型运算和对Cache控制延迟降低两部分之外，更重要的是完全解决了SSE指令集需要占用浮点数据暂存器问题。
时间前进至2004年，以Prescott为核心的英特尔奔腾4处理器加入了SSE3指令集，新增指令仅13条，主要是对水平式暂存器整数的运算，可对多笔数值同时进行加法或减法运算，令处理器能大量执行DSP及3D性质的运算。此外， SSE3更针对多线程应用进行最佳化，使处理器原有的Hyper-Theading功能获得更佳的发挥。补充版本作为SSE3指令集的补充版本，SSSE3出现在我们已经相对比较熟悉的酷睿微架构处理器中，新增有16条指令，进一步增强CPU在多媒体、图形图像和Internet等方面的处理能力。而英特尔方面本来是计划将该16条指令收录在后来的SSE4指令集中，但考虑到当时硬件升级速度的大幅提升，最终决定提早加入至酷睿微架构产品中。
接下来就是我们本页的主角SSE4指令集了。正如之前业界所盛传的那样，SSE4指令集被视为自2001年以来最重要的媒体指令集架构改进。除了将延续多年的32位架构升级至64位之外，还加入了图形、视频编码、处理、三维成像及游戏应用等众多指令，使得处理器在音频、图像、数据压缩算法等多方面性能大幅度提升。
不过与以往不同，英特尔将SSE4分为了4.1和4.2两个版本，因此现在所看到的45纳米Penryn核心处理器中，只集成了SSE 4.1版本。而至于SSE4.2，英特尔公司应该也会在不长的时间里为我们带出。那么新的SSE 4.1指令集拥有哪些特别之处呢？一起来看看吧！新增指令SSE 4.1版本的指令集新增加了47条指令，主要针对向量绘图运算、3D游戏加速、视频编码加速及协同处理的加速。英特尔方面指出，在应用SSE4指令集后，45纳米Penryn核心额外提供了2个不同的32位向量整数乘法运算支持，并且在此基础上还引入了8位无符号最小值和最大值以及16位、32位有符号和无符号的运算，能够有效地改善编译器编译效率，同时提高向量化整数和单精度运算地能力。另外，SSE4.1还改良了插入、提取、寻找、离散、跨步负载及存储等动作，保证了向量运算地专一化。 
SSE4.1还加入了6条浮点型运算指令，支援单、双精度地浮点运算及浮点产生操作。其中IEEE 754指令可实现立即转换运算路径模式，大大减少延迟，保证数据运算通道的畅通。而这些改变，对于进行3D游戏和相关的图形制作是具有相当深远的意义。除此之外，SSE4.1指令集还加入了串流式负载指令，可提高图形帧缓冲区的读取数据频宽，理论上可获取完整的缓存行，即单次性读取64位而非原来的8位 ，并可保持在临时缓冲区内让指令最多带来8倍的读取频宽效能提升。对于图形处理器与中央处理器之间的数据共享起到重要作用。
方便性
简化量是非常巨大的。而在复杂的动态预测程序中，要执行复杂的SAD代码，这时SSE4还可以额外提供更高的方便性：
SSSE3可以看作是SSE4的一个提前“泄露”的子集，同样的工作，右边的SSE4代码无疑要比SSSE3更为简捷。
SSE4当中还加入了快速查找的指令，虽然并不仅仅是视频编码才能具有作用，然而对于整位像素和子像素运动估计方面具有特别好的效果，如下图的指令可以在8个元素中找到最小的一个元素，并找到其位置：
在Intel的SSE4展示当中，使用搭载SSE4指令集的2.66G Wolfdale Core 2系统对比2.33G Core 2 Duo E6550进行Pegasys TMPGEnc 4.0 XPress HDTV编码，最后得到了55%的性能提升，其中加速的SAD处理和快速查找在各自的领域的性能提升达到了2~3倍，SSE4指令集的作用可见一斑：
其中，CPU的频率提升只有14%，总应用程序提升却达到了55%，这就是SSE4视频编码加速指令的作用了。
SSE4图形加速部分包括了32条指令，包括了图形构造上的大量基本操作指令：点积、双字节乘积、非单位步长存取等，并对现有指令的交叉支持改进了编译器的向量化，这部分指令相当于重新提供了一个向量化的图形操作基础，可以极大地提升处理器在图形处理方面的能力。
32条指令具体划分6个部分
12条32位向量整数操作，用于提供快速的向量整数运算
7条非单位步长存取操作，提供快速的向量载入/保存
2条点积操作，在构造阵列(Array-Of-Structures)运算中可以提供非常快的点积运算能力
6条变量及立即混合，用于提升传统SIMD代码的性能
1条早期参量输出，可以快速测试128-bit宽度数据
4条浮点取整，用于如Floor()、Ceil()，NINT()，nearbyint()这些经常用到的高级语言代码，提高他们的性能
作为例子，32位向量整数操作指令是当前编程语言原语的向量版本，包括了双字节乘、填充双字节最小值/最大值、DWORD到Word组转换、QWORD比较等指令，右下显示了DWORD到Word组转换使用SSE2和SSE4指令分别编写的情形：SSE4只需要1条，而SSE2需要11条。
SSE4流加载部分虽然只有一条指令，不过其确实具有相当重要的地位。在现有的平台当中，CPU使用Write Combining技术可以实现很高带宽的写入操作，可以通过MMIO的方式将图形数据很快地写入到Write Combining缓存并迅速写入内存当中，然而读取却是非常的缓慢，因为Write Combining缓存的读取是缓慢的(没有Read Combining)……读取带宽被限制为800MB/s。
Streaming Load技术就是为了解决这个问题，它提供了一个16位对齐的加载指令，可以快速地对Write Combining内存进行操作，可以以高达8GB/s的速率加载数据至CPU(SSE4架构新增加了一个内部临时缓存来存放这些数据)，从而大大提升了GPU-CPU之间的数据带宽，在现在GPU越来越强大、数据流量越来越大的情形下，这是非常必要的。
最后，虽然这个Streaming Load是以视频加速为例子，实际上它的工作方式对其他外设也是有用的，这是一个通用性的提高WC内存读取速度的技术。[6]
技术特色
Intel最新45nm处理器还加入了0.5倍频调节，增加了SSE4指令集，Wolfdale增加了2个不同的32Bit向量整数乘法运算支持，引入了8 位无符号 (Unsigned)最小值及最大值运算，以及16Bit 及32Bit 有符号 (Signed) 及无符号运算，并有效地改善编译器效率及提高向量化整数及单精度代码的运算能力。同时，SSE4 改良插入、提取、寻找、离散、跨步负载及存储等动作，令向量运算进一步专门化。
基于新一代高-K金属栅极技术的45纳米Penryn处理器将采用SSE4指令集，包括47条指令，辅助整体性能有望提升40%，而且可使存取内存的速度度提升9倍。
自1999年多媒体指令集问世以来，其中1999年SSE指令集诞生，包含70条指令。2000年为SSE2指令集，包含有144条指令。2004年为SSE3指令集，包含13条指令。2006年为SSSE3指令集，包含32条指令。SSE4延续了多媒体指令集的发展。
SSE4指令集中有14条用作视频加速，32条指令适用于图形基本指令，还有一条名为Stroaming Load，可使存取内存的速度度提升9倍。应用范围为视频制作、便携式视频设备、视频检索、图形和图像、游戏和物理过程以及芯片加速器等。
在对一段720p规格的H.264高品质电影短片进行编码测试时，集成SSE4指令集的Yorkfield 3.33GHz处理器比QX6700处理器时间缩短了约40%。
此外，SSE4加入串流式负载指令，可提高以图形帧缓冲区的读取数据频宽，理论上可获取完整的快取缓存行，即每次读取64Bit而非8Bit，并可保持在临时缓冲区内，让指令最多可带来8倍的读取频宽效能提升，对于视讯处理、成像以及图形处理器与中央处理器之间的共享数据应用，有着明显的效能提升。
在SSE4指令集中，共引入了47条新的多媒体运算指令。其中一条“streaming load instruction”流加载指令引起了广泛的注意。该指令为16bit同步加载指令，但加载结果将会存储在高优先级的临时流缓冲中，绕过普通的CPU Cache。这一指令将有利于GPU从CPU中高速共享数据，加速图像处理。
从Intel 45nm产品的性能以及规格来看都要比上一代的65nm产品有了长足的进步，同时在超频潜力上又有了一个质的飞跃。而且由于45nm制程在成本上将会更低，因此在中低端市场的竞争中Intel 45nm制程的新处理器将更具有冲击力。
缺乏SSE4指令集的处理器高清性能明显下降
以酷睿II处理器的SSE4指令集来说，它新增加了47条指令数目，其中包括了图形、图像、数据装载各方面的革新。尤其对高清视编码和频播放来说，有着相当大的帮助，这一点从很多测试结果中也可以看出，最典型的就是被阉割了SSE4.1指令集的E5200高清测试。
在E5200和E7200这两款处理器将5分钟的1080P高清片段压缩为分辨率640×480视频的测试结果中。关闭SSE4.1选项时，两者成绩相当，而当E7200开启SSE4.1选项时，整个编码耗时比E5200减少了53秒之多，如果编码更长时间的高清视频，可以节省的时间将更为可观。这一测试可以让我们清楚的看到处理器指令集对于高清应用的帮助。
指令集可以极大提高处理器的高清性能
目前，电脑用户最迫切需要的是处理器高清解码能力和优秀的3D游戏计算能力，如果指令集加强了对高清视频解码以及3D游戏的性能优化，那么在执行相关程序时，性能将会有大幅度的提升。
从处理器的指令集发展来看，指令集的每一次进化会带来多媒体娱乐上相当大的变化。Intel第一次在奔腾处理器中加入MMX指令集就让许多用户为之一振，利用MMX指令集直接就可以对MP3和VCD进行解码，而无需使用VCD解压卡之类的产品了。随后的SSE系列指令集和3DNOW!指令集都有对视频和游戏进行优化，使得处理器的多媒体性能越来越好。如今，Intel 45nm的酷睿II处理器整合了全新的SSE4指令集，而AMD羿龙处理器具备了SSE4A指令集，这两款全新的指令集都对高清视频 解码进行了大幅度的优化。比如其中的SSE4指令集进一步加强编码效果，可同时处理8个4-byte宽度的SAD运算，常用于新一代高清影像编码如VC.1及H.264等规格中，令视频编码速度进一步提升，这也是Intel宣称双核处理器软解高清视频同样可以获得流畅、高质量播放效果的原因，可以说彻底的将处理器带入了高清时代。
SSE4A兼容于SSE4
关于AMD SSE4A和INTEL SSE4的区别有两种说法,Intel在对45nm Penryn的设计中加入了SSE4.1指令集，AMD也在Stars架构中加入了SSE4A（之前为SSE128），两者并不兼容，SSE4A的前途并不明朗。
不过后期的说法是SSE4A指令集是针对2007年同期Intel 45nm新处理器推出的SSE4指令集而修改而来，Intel的SSE4会增加48条指令，为了保证和SSE4指令集最大的兼容，SSE4A则去除其中对I64优化的指令，保留了SSE4在图形处理、影音编码、3D运算、游戏等多媒体指令，也就是说两者基本保持兼容，显然这种情况才是软件设计师和大众更喜欢看到的.因为当支持SSE4的软件检测到CPU支持SSE4的时候，才得以继续安装而不会造成“下一步”是灰色的.
产品前景
据Intel指出，在应用SSE4指令集后，Penryn增加了2个不同的32Bit向量整数乘法运算支持，引入了8位无符号 (Unsigned)最小值及最大值运算，以及16Bit 及32Bit 有符号 (Signed) 及无符号运算，并有效地改善编译器效率及提高向量化整数及单精度代码的运算能力。同时，SSE4 改良插入、提取、寻找、离散、跨步负载及存储等动作，令向量运算进一步专门化。不仅如此，Intel SSE4指令集还进一步增强讯编码效果，例如可同时处理8个4-byte宽度的SAD(Sums of Absolute Differences)运算，常用于新一代高清影像编码如VC.1及H.264等规格中，令视频编码速度进一步提升。因此在播放高清视频的时候，即使在软解的情况下也同样游刃有余。
应用范围
SSE4 指令集构建于英特尔64 指令集架构 (Intel® 64 Instruction Set Architecture) (ISA)，该架构是开发 32 位和 64 位应用最为广泛应用的电脑架构。Intel&reg　SSE4 包含 54 条指令，主要分为两类：矢量化编译器和媒体加速器，以及高效加速字符串和文本处理。矢量化编译器和媒体加速器可提供高性能的编译器函数库，如封包（同时使用多个操作数）整数运算和浮点运算，可生成性能优化型代码。此外，它还包括高度优化的媒体相关运算，如绝对差值求和、浮点点积和内存负载等。矢量化编译器和媒体加速器指令可改进音频、视频和图像编辑应用、视频编码器、3D 应用和游戏的性能。高效加速字符串和文本处理包含多个压缩字符串比较指令，允许同时运行多项比较和搜索操作。由此受益的应用包括数据库和数据采掘应用，以及那些利用病毒扫描和编译器等分析、搜索和模式匹配算法的应用。[7]