Pentium III处理器的单指令多数据流扩展指令入门

转至http://www.vckbase.com/index.php/wv/175

在这篇文章里,我们将向你展示Pentium III处理器和她的这些新特性,并且将着重讲述Pentium III处理器的新指令集.

1.Pentium III处理器概要

1999年2月,Intel发布了她的最新款处理器Pentium III处理器,和以往的新处理器推出一样,速度的提高是最主要的性能改善.Intel在发布她的新处理器时一贯遵循着摩尔定律,即每过18个月处理器的速度将提高一倍(the processor speed doubles every 18 months),但是Pentium III处理器的并没有比Pentium II的速度提高一倍,在Pentium II和Pentium II Xeon处理器运行在333MHz~400MHz时,Pentium III也只不过运行 在450MHz~550MHz而已,处理器的速度并没有多大的提高,但是性能的提升确是很明显的.

从本质上说,Pentium III处理器只不过是一个运行在更高速度的Pentium II处理器,另外再增加了一些新的指令集:Streaming SIMD Extensions(单指令多数据流扩展指令集,或者称为SSE).这些新指令集的增加并不会影响原来的程序运行,因为Pentium III处理器采用的是完全兼容于原来Pentium II处理器的IA-32构架.

如果Pentium III处理器的速度并没有比Pentium II有倍速的提高,那我们为什么还要去选购她呢?

2.Pentium III处理器的新特性 

Pentium III处理器添加了两个有趣也是很有用的新特性:处理器序列号(processor serial number)和SSE指令集.由于Pentium III处理器的序列号涉及到用户隐私的争议,为了避免这种争议,在这里我们将把注意力放在Pentium III处理器的SIMD新指令集上.

SSE包含一个SIMD的首字母,SIMD是Single Instruction Multiple Data(单指令多数据)的首字母的缩写.通常,处理器在一个指令周期只能处理一个数据,这叫做Single Instruction Single Data(单指令单数据),缩写为SIDI.和SIDI不同的是,如果处理器具有SIMD能力,那么她就可以在一个CPU指令周期同时处理多个数据. 

3.MMX vs SSE 

MMX和SSE都是在原来的处理器指令集的基础上添加的扩展指令集,都是SIMD(单指令多数据)指令,不同的是他们处理的数据类型不同. MMX只能在整数上支持SIMD,而SSE指令增加了单精度浮点数的SIMD支持.MMX可以进行同时对2个32位的整数操作,而SSE可以同时对4个32位的浮点数操作. 

MMX和SSE的一个主要的区别是MMX并没有定义新的寄存器,而SSE定义了8个全新的128位寄存器,每个寄存器可以同时存放4个单精度浮点数(每个32位长),他们在寄存器中排列顺序见下图1.

 Pentium III处理器的单指令多数据流扩展指令入门_第1张图片

图一:新数据类型排列 

这里有一个问题,既然MMX没有定义新的寄存器,那么她又有什么寄存器可操作呢?事实上,MMX是和原来的浮点寄存器共享的.一个浮点寄存器是80位长的,她的低端64位被用做MMX的寄存器.这样,一个应用程序就不能在执行MMX指令的同时进行浮点操作了.同时,处理器还要花掉大量的时钟周期去维护寄存器状态从MMX操作和浮点操作之间的切换.SSE指令集就没有这些限制了.由于她定义了全新的寄存器,应用程序可以在进行整数SIMD操作(MMX)的同时进行浮点数的SIMD操作(SSE),同样,SSE还可以在执行浮点数的非SIMD操作的同时进行SIMD操作. 

MMX和SSE的寄存器排列见下图2.图2(a)是MMX和浮点数共享一个寄存器的情况,图2(b)是SSE的独立寄存器排列.

 Pentium III处理器的单指令多数据流扩展指令入门_第2张图片

图二:MMX和SSE的寄存器 

MMX和SSE寄存器有一个共同点,那就是都有8个寄存器.MMX的寄存器被命名为mm0~mm7,SSE的寄存器名字是xmm0~xmm7. 

4.程序中的应用 

Pentium III的SSE指令集是为SIMD设计的,她可以同时操作4个单精度浮点值.因此,利用这些加强的浮点计算能力,对3D应用程序的细节表现是有实质性的提高的.事实上,SSE就是为3D应用创建的.游戏和其他的使用后端3D来显示2D和2.5D图象的程序,和使用矢量图形的应用程序一样都能分享到这种好处. 

4.1 3D运算

计算机表示的3D图形是用大量的表示图形顶点的浮点数组成的,通过操作这些顶点数据就可以改变3D图形的外观.通过使用SSE指令集,应用程序可以获得更多的帮助,处理器可以在一个时钟周期内处理更多的数据,大大加快了3D图形的顶点计算速度,可以给用户带来更深刻的3D体验.

同样,应用程序开发者还可以用更多的顶点数据和更复杂的算法来创造出更为生动的3D图象效果来. 

使用SSE指令集可以显著的改善一些在3D操作中经常用到的计算,像矩阵乘法、矩阵变换以及矩阵之间的加、减、乘、向量矩阵相乘、矢量化、 矢量点相乘和光照计算等等. 

5.单指令多数据流指令集 

SSE增加了70条新的指令,同时也添加了一个状态/控制字(status/control word).SSE指令集必须要得到操作系统的支持,支持她的操作系统必须能够保存和恢复这个处理器的状态字.目前,只有Microsoft的Windows98和Windows2000支持SSE指令集.SSE定义了新的指令、新的数据类型和指令范畴. 

这些新添加的指令不是全部用来浮点数SIMD操作的,在这70条新指令中,有50条是浮点数的SIMD操作的,12条是针对整数的SIMD操作的,还有8条是cache操作(cacheability )指令.在这篇文章里,我们将着重讨论这50条浮点数的SIMD操作指令. 

5.1 分类 

Pentium III的SIMD新指令集可以按照不同的分类标准得到不同的分类方法. 

如果我们按照指令的操作数划分,可以得到"数据包装"(Data Packing)的分类方法. 

如果按照指令的动作特征划分,可以得到"指令范畴"(Instruction Categories)分类方法. 

如果按照指令的计算特征划分,可以得到"指令分组"(Instruction Groups)分类方法. 

5.1.1 数据包装分类

如果我们按照指令的操作数划分浮点数的SIMD部分,我们可以得到两个明显的分类:操作包裹数据(packed data)的指令和操作标量数据(scalar data)的指令.因此,我们可以得到包裹指令(packed instructions )和标量指令(scalar instructions)这两个种类. 

在Pentium III指令集中,包裹指令和标量指令可以很方便的被区分出来.包裹指令的都带有"ps"前缀,而标量指令有一个"ss"前缀. SSE还定义了一个新的数据类型(data type),可以用来储存4个单精度浮点数,这个新的数据类型可以用下面的图3来表示.图中的元素"A"包含了4 个单精度浮点数a0,a1,a2,a3.

 

图三:SSE的新数据类型

上面的图三可以帮助我们理解包裹指令和标量指令之间的区别.SSE的包裹指令同时操作这个新数据类型的4个元素,而标量指令只操作这个新数据类型的最后一个元素,其他三个元素的内容将在指令执行前后保持不变. 

图4说明了包裹指令的操作方法.如图所示,有两个操作数A和B,都是SSE定义的新数据类型.操作结果将被保存在数据C.C和A、B是一样的数据类型.操作数A有四个组成元素a0,a1,a2,a3,同样操作数B也有四个元素b0,b1,b2,b3.下图中的op是要进行的操作指令.
 Pentium III处理器的单指令多数据流扩展指令入门_第3张图片

图四:包裹操作

操作指令是被分别作用于A和B的四个元素的,操作结果将被放在C的相应元素中.指令op是在同一个时间对这四个元素操作的,并在同一个计算单元中进行计算. 

一个标量指令使用和上面一样的操作指令op,操作数A和B,如下图5示例说明.在这里操作指令只作用于操作数A和B的最后一个元素.同样,结果只储存在C的相应最后一个元素中.还有,在这里虽然只有一个元素被改变,操作指令op仍然同时操作所有的4个元素.并且也是在一个计算单元中进行的.

 Pentium III处理器的单指令多数据流扩展指令入门_第4张图片

图五:标量操作

5.1.2 指令范畴分类(按照指令动作类型划分) 

SSE指令集中几乎所有的包裹指令都有一个标量指令和她对应.SSE指令也可以不按操作数分类,而是把她分成下面的几个类:

· 计算指令(computation instructions)

· 分支指令(branching instructions)

· Cache指令(cacheability instructions)

· 数据移动和排序指令(data movement and ordering instructions)

5.1.3 指令组分类(按照指令计算特征分类) 

SSE指令还可以被分成下面的几类:

· 算术指令(arithmetic instructions)

· 比较指令(comparison instructions)

· 逻辑指令(logical instructions)

· 清洗指令(shuffle instructions)

· 转换指令(conversion instructions)

· 状态操作指令(state management instructions)

· Cache指令(cacheability instructions)

· 数据操作指令(data management instructions)

· 附加整数指令(additional integer instructions)

5.2 优点 

SSE最主要的优点是可以大大减小数据计算的指令操作数目.如果不使用SIMD和SSE,要进行一个400次的浮点数乘法计算,需要循环使用400次的乘法指令.而如果使用了SIMD和SSE,则只要进行100次的乘法指令就可以完成相同的任务了,因为这里每次的乘法操作都可以同时对4个浮点数进行计算.

转自:DDJ Microprocessor Center

你可能感兴趣的:(sse,SSE,汇编,汇编,SSE)