SSE 4.2的Nehalem微架构SSE4.2全新指令集

如题所述

第1个回答  2016-05-30

SSE是英特尔提出的即MMX之后新一代CPU指令集,最早应用在PIII系列CPU上。已经得到了Intel PIII、P4、Celeon、Xeon、AMD Athlon、duron等系列CPU的支持。而更新的SSE2指令集仅得到了P4系列CPU的支持,这也是为什么这篇文章是讲SSE而不是SSE2的原因之一。另一个原因就是SSE和SSE2的指令系统是非常相似的,SSE2比SSE多的仅是少量的额外浮点处理功能、64位浮点数运算支持和64位整数运算支持。 因为它使用了128位的存储单元,这对于32位的浮点数来讲,是可以存下4个的,也就是说,SSE中的所有计算都是一次性针对4个浮点数来完成的,这种批处理当然就会带来效率的提升。再来回顾一下SSE的全称:Stream SIMD Extentions(流SIMD扩展)。SIMD就是single instruction multiple data,连起来就是“数据流单指令多数据扩展”,从名字人们就可以更好的理解SSE是如何工作的了。
提升的SSE4.2 SSE4指令集被认为是2001年以来Intel最重要的指令集扩展,包含54条指令。 Intel在Penryn处理器中加入了对SSE4.1的支持,共增加了47条新指令,提升了处理器在图形、3D图像与游戏、视频编码与影音处理等方面的性能表现。本次在Nehalem处理器中,进一步支持了SSE4.2指令集。SSE4.2完整的实现了SSE4指令集,相对于SSE4.1加入了7条新指令。
虽然SSE从理论上来讲要比传统的浮点运算会快,但是他所受的限制也很多,首先,虽然他执行一次相当于四次,会比传统的浮点运算执行4次的速度要快,但是他执行一次的速度却并没有想象中的那么快,所以要体现SSE的速度,必须有Stream做前提,就是大量的流数据,这样才能发挥SIMD的强大作用。其次,SSE支持的数据类型是4个32位(共计128位)浮点数集合,就是C、C++语言中的float[4],并且必须是以16位字节边界对齐的(稍后会以代码来进行阐释,关于边界对齐的概念,读者可以参考论坛上的其它文章,都会有很详细的解答,这里就恕不赘述了)。因此这也给输入和输出带来了不少的麻烦,实际上主要影响SSE发挥性能的就是不停的对数据进行复制以适用应它的数据格式 。 英特尔SSE4指令集最早出现于45纳米处理器上,首颗发布的Core 2 Extreme QX9650配备了SSE4指令集的第一版,即SSE4.1,凭借着这一指令集,45纳米酷睿2处理器的多媒体性能相对于65纳米产品提升了70%,而在Nehalem Core i7上,预计会迎来SSE4指令集的第二版,即SSE4.2。
人们知道,SSE 4.1版本的指令集增加了47条指令,主要针对向量绘图运算、3D游戏加速、视频编码加速及协同处理的加速。英特尔方面指出,在应用SSE4指令集后,45纳米Penryn核心额外提供了2个不同的32位向量整数乘法运算支持,并且在此基础上还引入了8位无符号最小值和最大值以及16位、32位有符号和无符号的运算,能够有效地改善编译器编译效率,同时提高向量化整数和单精度运算地能力。另外,SSE4.1还改良了插入、提取、寻找、离散、跨步负载及存储等动作,保证了向量运算地专一化。
经过测试,SSE4.1指令集的处理器比不具备此指令集的同档次处理器的视频编码效能提高了70%,在游戏中也有很明显的性能提升。而SSE4.2指令集则把重点放在了文本处理上。据英特尔透露,Nehalem的SSE4.2指令集中的7条指令用途各不相同,有面向CRC-32和POP Counts的,也有特别针对XML的流式指令。帕特·基辛格表示,SSE4.2指令集可以把256条指令和并在一起执行让类似XML的工作性能提升3倍!

相似回答