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的前景良好。