服务器 频道

IA32多媒体指令集革命 Intel SSE4前瞻

  2007年11月,英特尔将会发布一系列新处理器产品,其中将会包括用于双路服务器的Xeon系列处理器和用于高端PC的处理器,它们均采用了目前非常先进的采用了45nm制程技术,戈登•摩尔先生给予了这项技术极高的评价:“采用高-k栅介质和金属栅极材料,是自上世纪60年代晚期推出多晶硅栅极金属氧化物半导体(MOS)晶体管以来,晶体管技术领域里最重大的突破!”我们将通过一系列的文章帮助读者提前了解这一技术和相关的产品。

  【IT168评测中心】自从2007年IDF透露了45nm Penryn处理器发布计划之后,Penryn的各种消息也不断地传出,这款基于45nm技术的处理器除了工艺上的进步之外,还有着架构的变动、指令集的更新,这符合着Intel一段时间(每2年)内就要对处理器进行一次较大的改进的习惯。

  Penryn处理器搭载了最新的SSE4指令集,SSE4(Streaming SIMD Extensions 4)是英特尔自从SSE2之后对ISA扩展指令集最大的一次的升级扩展,它将会随着Penryn处理器陆续应用于台式机平台、移动平台和服务器中。据目前所致,SSE4包括大约50条新指令,Penryn通过这些新指令集,增强了从媒体应用到高性能计算应用领域的性能,同时还利用一些专用电路实现对于特定应用加速。

  其实IA32架构上不断增加的指令集都是面向多媒体应加速而来,因为在多媒体环境下需要处理大量重复的数据,因此自MMX开始,CPU厂商就开始新增SIMD(Single Instruction Multiple Data)多媒体指令集,可以在单一指令内完成多个批次性的数据处理,从而大大提升多媒体数据处理能力,让我们先来看看SIMD扩展指令集的简单历史。

  自从Intel在P55C Pentium加入MMX(MultiMedia Extensions)指令以来,x86指令集就不断得到扩充,3D Now!之类的扩展集时有出现。这些指令集主要都是通过SIMD的方式来提升多媒体数据处理能力。

  指令数量达到57条的MMX扩展集属于侧重整数运算的扩展指令集,除了整数运算,浮点运算也是非常重要的,Intel在1999年首次在Pentium III处理器中引入了SSE(Streaming SIMD Extensions)扩展指令集来增强x86架构的浮点运算能力,SSE初代包括了70条新指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。

  在SSE之后Intel很快在2000年的Willamette Pentium 4中推出了SSE2指令集,这个指令集的指令数目达到了非常之多的144条,用于提升双精度向量运算能力和128位向量整数运算能力,可见SSE指令集也并不是仅仅包括浮点运算的,SSE可以做看作是IA32架构按照形势需要而作的不断扩充。

  在2000年推出SSE2之后,Intel很久没有进行这方面的大扩充了,在2004年增加的SSE3只包括了13条新指令(首先在Prescott Pentium 4中出现),2006年增加的SSSE3(Supplemental Streaming SIMD Extensions 3)只包括32条新指令(首先在Core 2 Duo上出现),前者主要提升复数运算性能,后者主要改进了解码性能,或许是由于提前发布的缘故(原来计划包括在SSE4中),SSSE3并没有采用SSE4这样的命名。

  从指令数目上看,SSE4的47条也是2000年来最多的变化,同时,SSE4中增加了的指令改进了整数和浮点操作,支持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

  简化量是非常巨大的。而在复杂的动态预测程序中,要执行复杂的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内存读取速度的技术。

  45nm技术内部结构的更新无疑会带来更快的性能,然而SSE4指令的引入带来的提升更加巨大,据Intel资深工程师兼 Penryn微架构主管 Stephen Fischer表示,全新 DivX Alaph内部测试版本已完全支持SSE4指令集, 1颗3.33GHz的Yorkfield的运算效能,相比上代Intel Core 2 Duo QX6800快约105% ,其中约7成的增益来自SSE4指令集,这可以看出新指令集的效率的确不凡。其它不同的编码测试也得到了相似的结果。

  并且,作为45nm处理器基础架构的一部分,所有Penryn核心处理器都会具有这个指令集,这意味着即使是使用其中最低端的、廉价的“Celeron”版本,也能享受到新指令集带来的益处,并且也不用付出特别的代价,这也是新技术带给用户的实际益处。

  我们可以看到,即使是在未完全优化的工程样板CPU和配合的测试版本软件当中,新指令集的效能也令人满意,毕竟SSE4指令集就是设计用来提升视频、图像运算性能的,剩下的问题就是如何发挥SSE4的力量的问题了。按照惯例,Intel会在CPU推出的时候在自家的Intel C/C++和Fortran编译器上提供支持,也会提供相关的文档、SDK工具,凭着Intel的号召力以及SSE4本身性能上的提升带来的吸引力,而且由于当前高清晰视频流行,这些对性能不断提升的需求,更会形成一种拉力,SSE4的前景良好。

0
相关文章