标题：CPU扩展指令集
基本概况
CPU依靠指令来计算和控制系统，每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标，指令集是提高微处理器效率的最有效工具之一。从主流体系结构讲，指令集可分为复杂指令集和精简指令集两部分，而从具体运用看，如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)、SEE3和AMD的3DNow!等都是CPU的扩展指令集，分别增强了CPU的多媒体、图形图象和Internet等的处理能力。通常会把CPU的扩展指令集称为"CPU的指令集"。SSE3指令集也是规模最小的指令集，此前MMX包含有57条命令，SSE包含有50条命令，SSE2包含有144条命令，SSE3包含有13条命令。[1]
精简指令集的运用
在最初发明计算机的数十年里，随着计算机功能日趋增大，性能日趋变强，内部元器件也越来越多，指令集日趋复杂，过于冗杂的指令严重的影响了计算机的工作效率。后来经过研究发现，在计算机中，80％程序只用到了20％的指令集，基于这一发现，RISC精简指令集被提了出来，这是计算机系统架构的一次深刻革命。RISC体系结构的基本思路是：抓住CISC指令系统指令种类太多、指令格式不规范、寻址方式太多的缺点，通过减少指令种类、规范指令格式和简化寻址方式，方便处理器内部的并行处理，提高VLSI器件的使用效率，从而大幅度地提高处理器的性能。
相关原理
CPU依靠指令来计算和控制系统，每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标，指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲，指令集可分为复杂指令集和精简指令集两部分，而从具体运用看，如Intel的MMX（Multi Media Extended）、SSE、 SSE2（Streaming-Single instruction multiple data-Extensions 2）、SEE3、SEE4和AMD的3DNow!等都是CPU的扩展指令集，分别增强了CPU的多媒体、图形图象和Internet等的处理能力。我们通常会把CPU的扩展指令集称为”CPU的指令集”。SSE3指令集也是目前规模最小的指令集，此前MMX包含有57条命令，SSE包含有50条命令，SSE2包含有144条命令，SSE3包含有13条命令。目前SSE3也是最先进的指令集，英特尔Prescott处理器已经支持SSE3指令集，AMD会在未来双核心处理器当中加入对SSE3指令集的支持，全美达的处理器也将支持这一指令集。
基本分类
从现阶段的主流体系结构讲，指令集可分为复杂指令集和精简指令集两部分，而从具体运用看，如Intel的MMX（Multi Media Extended）、SSE、 SSE2（Streaming-Single instruction multiple data-Extensions 2）和AMD的3DNow!等都是CPU的扩展指令集，分别增强了CPU的多媒体、图形图象和Internet等的处理能力。通常会把CPU的扩展指令集称为"CPU的指令集"。
服务器CPU按指令集分类
CISC指令集CISC指令集，也称为复杂指令集，英文名是CISC，（Complex Instruction Set Computer的缩写）。在CISC微处理器中，程序的各条指令是按顺序串行执行的，每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单，但计算机各部分的利用率不高，执行速度慢。其实它是英特尔生产的x86系列（也就是IA-32架构）CPU及其兼容CPU，如AMD、VIA的。即使是新起的X86-64（也被成AMD64）都是属于CISC的范畴。X86指令集是Intel为其第一块16位CPU(i8086)专门开发的，IBM1981年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令，同时电脑中为提高浮点数据处理能力而增加了X87芯片，以后就将X86指令集和X87指令集统称为X86指令集。
虽然随着CPU技术的不断发展，Intel陆续研制出更新型的i80386、i80486直到过去的PII至强、PIII至强、Pentium 3，最后到Pentium 4系列、至强（不包括至强Nocona），但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源，所以Intel公司所生产的所有CPU仍然继续使用X86指令集，所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU（如AMD Athlon MP、）都使用X86指令集，所以就形成了庞大的X86系列及兼容CPU阵容。x86CPU目前主要有intel的服务器CPU和AMD的服务器CPU两类。RISC指令集RISC是英文“Reduced Instruction Set Computing ” 的缩写，中文意思是“精简指令集”。它是在CISC指令系统基础上发展起来的，有人对CISC机进行测试表明，各种指令的使用频度相当悬殊，最常使用的是一些比较简单的指令，它们仅占指令总数的20％，但在程序中出现的频度却占80％。复杂的指令系统必然增加微处理器的复杂性，使处理器的研制时间长，成本高。并且复杂指令需要复杂的操作，必然会降低计算机的速度。基于上述原因，20世纪80年代RISC型CPU诞生了，相对于CISC型CPU ,RISC型CPU不仅精简了指令系统，还采用了一种叫做“超标量和超流水线结构”，大大增加了并行处理能力。RISC指令集是高性能CPU的发展方向。它与传统的CISC(复杂指令集)相对。相比而言，RISC的指令格式统一，种类比较少，寻址方式也比复杂指令集少。当然处理速度就提高很多了。目前在中高档服务器中普遍采用这一指令系统的CPU，特别是高档服务器全都采用RISC指令系统的CPU。RISC指令系统更加适合高档服务器的操作系统UNIX，Linux也属于类似UNIX的操作系统。RISC型CPU与Intel和AMD的CPU在软件和硬件上都不兼容。在中高档服务器中采用RISC指令的CPU主要有以下几类：PowerPC处理器 、SPARC处理器、PA-RISC处理器、MIPS处理器、Alpha处理器。IA-64EPIC（Explicitly Parallel Instruction Computers，精确并行指令计算机）是否是RISC和CISC体系的继承者的争论已经有很多，单以EPIC体系来说，它更像Intel的处理器迈向RISC体系的重要步骤。从理论上说，EPIC体系设计的CPU，在相同的主机配置下，处理Windows的应用软件比基于Unix下的应用软件要好得多。
Intel采用EPIC技术的服务器CPU是安腾Itanium（开发代号即Merced）。它是64位处理器，也是IA－64系列中的第一款。微软也已开发了代号为Win64的操作系统，在软件上加以支持。在Intel采用了X86指令集之后，它又转而寻求更先进的64-bit微处理器，Intel这样做的原因是，它们想摆脱容量巨大的x86架构,从而引入精力充沛而又功能强大的指令集，于是采用EPIC指令集的IA-64架构便诞生了。IA-64 在很多方面来说，都比x86有了长足的进步。突破了传统IA32架构的许多限制，在数据的处理能力，系统的稳定性、安全性、可用性、可观理性等方面获得了突破性的提高。
IA-64微处理器最大的缺陷是它们缺乏与x86的兼容，而Intel为了IA-64处理器能够更好地运行两个朝代的软件，它在IA-64处理器上（Itanium、Itanium2 ……)引入了x86-to-IA-64的解码器，这样就能够把x86指令翻译为IA-64指令。这个解码器并不是最有效率的解码器，也不是运行x86代码的最好途径（最好的途径是 直接在x86处理器上运行x86代码），因此Itanium 和Itanium2在运行x86应用程序时候的性能非常糟糕。这也成为X86-64产生的根本原因。X86-64 （AMD64 / EM64T）AMD公司设计，可以在同一时间内处理64位的整数运算，并兼容于X86-32架构。其中支持64位逻辑定址，同时提供转换为32位定址选项；但数据操作指令默认为32位和8位，提供转换成64位和16位的选项；支持常规用途寄存器，如果是32位运算操作，就要将结果扩展成完整的64位。这样，指令中有“直接执行”和“转换执行”的区别，其指令字段是8位或32位，可以避免字段过长。
x86-64（也叫AMD64）的产生也并非空穴来风，x86处理器的32bit寻址空间限制在4GB内存，而IA-64的处理器又不能兼容x86。AMD充分考虑顾客的需求，加强x86指令集的功能，使这套指令集可同时支持64位的运算模式，因此AMD把它们的结构称之为x86-64。在技术上AMD在x86-64架构中为了进行64位运算，AMD为其引入了新增了R8-R15通用寄存器作为原有X86处理器寄存器的扩充，但在而在32位环境下并不完全使用到这些寄存器。原来的寄存器诸如EAX、EBX也由32位扩张至64位。在SSE单元中新加入了8个新寄存器以提供对SSE2的支持。寄存器数量的增加将带来性能的提升。与此同时，为了同时支持32和64位代码及寄存器，x86-64架构允许处理器工作在以下两种模式：Long Mode(长模式)和Legacy Mode(遗传模式)，Long模式又分为两种子模式(64bit模式和Compatibility mode兼容模式)。该标准已经被引进在AMD服务器处理器中的Opteron处理器。
而推出了支持64位的EM64T技术，再还没被正式命为EM64T之前是IA32E，这是英特尔64位扩展技术的名字,用来区别X86指令集。Intel的EM64T支持64位sub-mode，和AMD的X86-64技术类似，采用64位的线性平面寻址，加入8个新的通用寄存器（GPRs），还增加8个寄存器支持SSE指令。与AMD相类似，Intel的64位技术将兼容IA32和IA32E，只有在运行64位操作系统下的时候，才将会采用IA32E。IA32E将由2个sub-mode组成：64位sub-mode和32位sub-mode，同AMD64一样是向下兼容的。Intel的EM64T将完全兼容AMD的X86-64技术。Nocona处理器已经加入了一些64位技术，Intel的Pentium 4E处理器也支持64位技术。
应该说，这两者都是兼容x86指令集的64位微处理器架构，但EM64T与AMD64还是有一些不一样的地方，AMD64处理器中的NX位在Intel的处理器中将没有提供。[2]
扩展指令集
综述对于CPU来说，在基本功能方面，它们的差别并不太大，基本的指令集也都差不多，但是许多厂家为了提升某一方面性能，又开发了扩展指令集，扩展指令集定义了新的数据和指令，能够大大提高某方面数据处理能力，但必需要有软件支持。MMX 指令集
指令展望
AMD表示，SSE5指令集的使命之一是增强高性能计算应用，并充分发挥多核心、多媒体的并行优势。SSE5将把以往只存在于高性能特殊架构里的功能引入到x86平台中，以此最大化每条指令的输出能力，并增强代码库。
SSE5是128-bit指令集，一共有170条指令，其中基础指令64条，新增的最重要的有两条：
首先是“三操作数指令”(3-Operand InstrUCtions)。x86指令以往只能处理双操作数，而SSE5会提高到三操作数，达到RISC架构的水平，从而把多个简单的指令集整合到更高效的一个单独指令中，提高执行效率。
然后是“熔合乘法累积”(Fused Multiply Accumulate，FMACxx)。该技术可以把乘法和其他算法结合起来，保证之用一条指令就能完成迭代运算，从而简化代码、提高效率，适用于真实图形着色、快速照相渲染、空间化音频、复向量(矢量)数学等场合。
除此之外还有整数乘法累积指令(IMAC，IMADC)、置换与条件移动指令、向量比较与测试指令、精度控制舍入与变换指令等等。
新的指令集
市面上Intel和AMD的桌面级处理器在X86指令集的基础上，为了提升处理器各方面的性能，所以又各自开发新的指令集。指令集中包含了处理器对多媒体、3D处理等方面的支持，这些指令集能够提高处理器对这某些方面处理器能力，但是需要有必要的软件支持。Intel的主流桌面处理器共有两个模式，传统的IA-32模式和IA-32E模式。在可支持EM64T指令的处理器内有一个扩展功能激活寄存器（Extended Feature Enable Register），称为IA-32_EFER的部件，它控制处理器的EM64T是否被激活。在普通情况下，处理器会作为一颗标准的IA-32处理器，如果在运行64位的软件或程序时，EM64T就会被激活，那么处理器便会在IA-32E扩展模式下运行。[3]