就目前来看,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视频编码加速指令的作用了。
Penryn架构中SSE4相关的改良还有一个:就是Super Shuffle Engine,Intel称之为超级乱序引擎,不过我们认为称之为超级传送引擎更为贴切一些:
Super Shuffle Engine超级传送引擎
Super Shuffle Engine其实是加速SSE相关数据的传输转移过程,包括打包、解压、对齐、宽进位等操作,都可以通过Super Shuffle Engine来加速,从而可以在每个时钟周期内完成128位的操作。这个加速是完全硬件的,不需要软件的变动。
SSE4目前看来对视频服务器的性能提升强于对桌面系统的提升,然而由于SSE4指令集也有很多基本的运算加速指令,我们以后将会详细考察这个指令集在服务器实际性能上是否会有提升。