一些指令集详细介绍
MMX
MMX(Multi Media eXtension 多媒体扩展指令)指令集是Intel公司在1996年为旗 下的Pentium系列处理器所开发的一项多媒体指令增强技术。MMX指令集中包括了 57条多媒体指令,通过这些指令可以一次性处理多个数据,在处理结果超过实际 处理能力的时候仍能够进行正常处理,如果在软件的配合下,可以得到更强的处 理性能。使用MMX指令集的好处就是当时所使用的操作系统可以在不做任何改变的 情况下执行MMX指令。但是,MMX指令集的问题也是比较明显的,MMX指令集不能与 X86的浮点运算指令同时执行,必须做密集式的交错切换才可以正常执行,但是这 样一来,就会造成整个系统运行速度的下降。
SSE
SSE是Streaming SIMD Extension(SIMD扩展指令集)的缩写,而其中SIMD的为含意 为Single Istruction Multiple Data(单指令多数据),所以SSE指令集也叫单指 令多数据流扩展。该指令集最先运用于Intel的Pentium III系列处理器,其实在 Pentium III推出之前,Intel方面就已经泄漏过关于KNI(Katmai New Instruction)指令集的消息。这个KNI指令集也就是SSE指令集的前身,当时也有 不少的媒体将该指令集称之为MMX2指令集,但是Intel方面却从没有发布有关 MMX2指令集的消息。最后在Intel推出Pentium III处理器的时候,SSE指令集也终 于水落石出。SSE指令集是为提高处理器浮点性能而开发的扩展指令集,它共有 70条指令,其中包含提高3D图形运算效率的50条SIMD浮点运算指令、12条MMX 整 数运算增强指令、8条优化内存中的连续数据块传输指令。理论上这些指令对当时 流行的图像处理、浮点运算、3D运算、多媒体处理等众多多媒体的应用能力起到 全面提升的作用。SSE指令与AMD公司的3DNow!指令彼此互不兼容,但SSE包含了 3DNow!中的绝大部分功能,只是实现的方法不同而已。SSE也向下兼容MMX指令, 它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。
3DNow!
3DNow!指令集最由AMD公司所推出的,该指令集应该是在SSE指令之前推出的,被 广泛运用于AMD的K6、K6-2和K7系列处理器上,拥有21条扩展指令集。在整体上 3DNow!的SSE非常相相似,它们都拥有8个新的寄存器,但是3DNow!是64位的,而 SSE是128位。所以3DNow!它只能存储两个浮点数据,而不是四个。但是它和SSE的 侧重点有所不同,3DNow!指令集主要针对三维建模、坐标变换和效果渲染等3D数 据的处理,在相应的软件配合下,可以大幅度提高处理器的3D处理性能。AMD公司 后来又在Athlon系列处理器上开发了新的Enhanced 3DNow!指令集,新的增强指令 数达了52个,以致目前最为流行的Athlon 64系列处理器还是支持3DNow!指令的。
SSE2
在PentiumIII发布的时候,SSE指令集就已经集成在了处理器的内部,但因为各种 原因一直没有得到充分的发展。直到Pentium 4发布之后,开发人员看到使用SSE 指令之后,程序执行性能将得到极大的提升,于是Intel又在SSE的基础上推出了 更先进的SSE2指令集。
SSE2包含了144条指令,由两个部分组成:SSE部分和MMX部分。SSE部分主要负责 处理浮点数,而MMX部分则专门计算整数。SSE2的寄存器容量是MMX寄存器的两 倍,寄存器存储数据也增加了两倍。在指令处理速度保持不变的情况下,通过 SSE2优化后的程序和软件运行速度也能够提高两倍。由于SSE2指令集与MMX指令集 相兼容,因此被MMX优化过的程序很容易被SSE2再进行更深层次的优化,达到更好 的运行效果。SSE2对于处理器的性能的提升是十分明显的,虽然在同频率的情况 下,Pentium 4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以经过 SSE2优化后的程序Pentium 4的运行速度要明显高于Athlon XP。而AMD方面也注意 到了这一情况,在随后的K-8系列处理器中,都加入SSE2指令集。
SSE3
SSE3指令是目前规模最小的指令集,它只有13条指令。它共划分为五个应运层, 分别为数据传输命令、数据处理命令、特殊处理命令、优化命令、超线程性能增 强五个部分,其中超线程性能增强是一种全新的指令集,它可以提升处理器的超 线程的处理能力,大大简化了超线程的数据处理过程,使处理器能够更加快速的 进行并行数据处理。
上面介绍的基本上就是Intel和AMD公司在X86架构处理器上主要的扩展指令集,虽 然它们对于处理器的性能提升有着一定程度的帮助,但是由于受到IA-32体系的限 制,X86架构基本上不会再有具有革命性意义的指令集出现,而双方都已经把重心 转向了64位体系架构的处理器指令集开发上。
AMD64
AMD的athlon 64系列处理器的64位技术是在X86指令集的基础上加入了X86-64的 64位扩展X86指令集,这就使得athlon 64系列处理器可兼容原来的32位的X86软 件,并同时支持X86-64的扩展64位计算,并且具有64位的寻址能力,使得它成为 真正的64位X86构架处理器。在采用X86-64架构的Athlon 64处理器中,X86-64指 令集中新增了几组处理器寄存器,它能够提供更加快速的执行效率。
寄存器是处理器用来创建和储存CPU运算结果和其他运算结果的地方,标准的X86 构架中包括8组通用寄存器,而在AMD的X86-64架构中又增加了8组,将通过寄存器 的数目提高到了16组。在这基础之上,X86-64指令集还另外增加了8组128位的 XMM寄存器,也叫做SSE寄存器。它能够给单指令多数据流技术(SIMD)运算提供更 多的存储空间,这些128位的寄存器能够提供在矢量和标量计算模式下进行128位 双精度处理,这也为3D数据处理、矢量分析和虚拟技术提供了良好的硬件基础。 由于提供了更多的寄存器,按照X86-64标准生产的处理器可以更有效率的处理数 据,在一个时钟周期内能够传输更多的信息。
EM64T
EM64T(Extended Memory 64 Technology)也就是Intel公司开发的64位内存扩展技 术。它实际上就是Intel IA-32构架体系的扩展,即IA-32E(Intel Architectur-32 Extension)。Intel的IA-32处理器通过加入EM64T技术便可在兼 容IA-32软件的情况下,允许软件程序利用更多的内存地址空间,并且允许程序进 行32 位线性地址写入。
Intel的EM64T所强调的是32位技术与64位技术的兼容性,为采用EM64T的处理器增 加了8个64位通用寄存器,并将原有的32位通用寄存器全部扩展为64位,这样也提 高了处理器的整数运算能力。另外增加的8个SEE寄存器也提供了对SSE、SSE2和 SSE3指令的支持。
目前Intel的主流桌面处理器共有两个模式,传统的IA-32模式和IA-32E模式。在 可支持EM64T指令的处理器内有一个扩展功能激活寄存器(Extended Feature Enable Register),称为IA-32_EFER的部件,它控制处理器的EM64T是否被激活。 在普通情况下,处理器会作为一颗标准的IA-32处理器,如果在运行64位的软件或 程序时,EM64T就会被激活,那么处理器便会在IA-32E扩展模式下运行。
