泡泡网CPU频道 PCPOP首页      /      CPU     /      行情    /    正文

处理器的大脑!小编带您读懂CPU指令集

    泡泡网CPU频道4月26日 在我们对一款CPU进行全面的了解的时候,我们看看大多数人都遗漏了什么。很多人一般先从处理器的架构开始,看看该处理器采用了什么架构,相比上一代或者竞争对手的CPU在架构上都有什么改进或者优势。

    其次,再看这款CPU与同档次的处理器的主频孰高孰低,默认高主频的处理器一般是采用较好的晶圆来制造的,稳定性更好,再次是看该处理器的缓存容量有多少(尤其是Intel的处理器非常依赖缓存),缓存充当处理器与缓存之间的桥梁,起到一定的数据缓冲作用。

你知道处理器指令集吗?指令集有何用

全面了解处理器

    最后我们要看该处理器采用的制程,一般制程越先进,发热量越低,而相对越好超,而比较关注节能性能的网友,还会着重看该处理器的功耗为多少。那么我们看完这些参数是不是漏了些什么呢?

    其实仔细想想,我们会恍然大悟,还有该处理器支持的指令集。处理器单靠里面的硬件电路是不会计算的,必须依靠指令来计算和控制系统。

CPU指令集至关重要

    每款CPU设计的时候就制定了一套与内部电路配合的指令系统,从具体运用看,我们可以在很多CPU身上看到的就有MMX(Multi Media Extended)、SSE(Streaming SIMD Extensions)、SSE2、SSE3、SSSE3、SSE4(分为SSE4.1与SSE4.2两代,AMD的SSE4A包含在SSE4里面,这个后面会提到),另外还有AMD的3D NOW!系列。

    这些指令集可谓大大增强了CPU的多媒体、图形图象和Internet等的处理能力,下面就让我们逐个了解下。

MMX增强多媒体表现

    MMX(Multi Media eXtension,多媒体扩展指令集)指令集是英特尔于1996年推出,主要用于多媒体指令增强。

你知道处理器指令集吗?指令集有何用

支持MMX指令集的奔腾处理器

    MMX指令集中包括有57条多媒体指令,通过这些指令可以一次处理多个数据,在处理结果超过实际处理能力的时候也能进行正常处理。MMX的益处在于,当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序。

    支持MMX的处理器拥有8个MMX寄存器,每个有64-bit(8byte)的容量。MMX仅支持整数操作,支持1/2/4/8-bytes数据。那即是说,一个MMX寄存器能够储存8/4/2/1个操作。这造成了MMX指令集与x87浮点运算指令不能够同时执行,必须做密集式的交错切换才可以正常执行,这种情况就势必造成整个系统运行质量的下降。目前AMD和和英特尔处理器都支持这一指令集。

3D NOW!加速三维渲染

    3DNow!指令集是由AMD提出的,广泛应用于其K6-2 、K6-3以及Athlon(K7)处理器上。3DNow!跟后面提到的SSE非常类似,但也有一些不同。它拥有 8个新的寄存器,却是64-bit的,并非128-bit。这样,它只能存储两个浮点数据,而非四个。

你知道处理器指令集吗?指令集有何用

K6处理器开始具有3D NOW!指令集

    3DNow!可以执行操作:相加/相乘 /相除运算,精确或者近似平分根。3DNow!指令集技术其实就是21条机器码的扩展指令集。3DNow!指令集主要针对三维建模、坐标变换 和效果渲染等三维应用场合,在软件的配合下,可以大幅度提高3D处理性能。后来在Athlon上开发了Enhanced 3DNow!。

SSE加快处理多媒体应用

    SSE全拼是Streaming SIMD Extension,中文名称为SIMD扩展流。SIMD英文全称为 Single  Istruction Multiple Data(单指令多数据),即一条指令可以完成多个操作。SSE是为提供处理器浮点性能而开发的扩展指令集。

    SSE指令集包括了70条指令,其中包含单指令多数据浮点计算、以及额外的SIMD整数和高速缓存控制指令。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2视频、同时MPEG2加解密;语音识别占用更少CPU资源;更高精度和更快响应速度。

你知道处理器指令集吗?指令集有何用

SSE与MMX指令集

    SSE指令与3DNow!指令彼此互不兼容,但SSE包含了3DNow!技术的绝大部分功能,只是实现的方法不同。SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。

    SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是MMX的超集。AMD后来在Athlon XP中加入了对这个指令集的支持。这个指令集增加了对8个128位寄存器XMM0-XMM7的支持,每个寄存器可以存储4个单精度浮点数。使用这些寄存器的程序必须使用FXSAVE和FXRSTR指令来保持和恢复状态。但是在Pentium III对SSE的实现中,浮点数寄存器又一次被新的指令集占用了,但是这一次切换运算模式不是必要的了,只是SSE和浮点数指令不能同时进入CPU的处理线而已。

SSE2 更精确处理浮点数

    SSE2是英特尔为了应对AMD的3Dnow!+指令集,在SSE的基础上开发了SSE2,增加了一些指令,使得其处理器性能有大幅度提高。

你知道处理器指令集吗?指令集有何用

SSE2最早在奔4引入

    最早在Pentium 4处理器的最初版本中引入,AMD后来在Opteron 和Athlon 64处理器中也加入了SSE2的支持。到P4设计结束为止,Intel增加了一套包括144条新建指令的SSE2指令集。SSE2涉及了多重的数据目标上立刻执行一单个的指令(即SIMD)。最重要的是SSE2能处理128位和两倍精密浮点数学运算。

    处理更精确浮点数的能力使SSE2成为加速多媒体程序、3D处理工程以及工作站类型任务的基础配置。

    SSE2指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。这个指令集还增加了对CPU快取的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器。Intel后来在其EM64T架构中也增加了对AMD64的支持。

SSE3促进五个应用

    SSE3指令集是规模最小的指令集,此前MMX包含有57条命令,SSE包含有50条命令,SSE2包含有144条命令,SSE3包含有13条命令。此外Intel害针对SSE3指令集作了一次额外扩充,那就是SSSE3是,最早内建于Core 2 Duo处理器中。

你知道处理器指令集吗?指令集有何用

Intel Core 2 Duo处理器

    SSE3指令集共分为5个应用层: 第一层是“数据传输”,只有一条指令:FISTTP,它有利于x87浮点转换成整数,并可以大大提高优化的效率。 第二层是“数据处理”,指令共有五条,分别是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。这些指令可以简化复杂数据的处理过程,由于未来数据处理流量将会越来越大,因此Intel在这里应用的指令集最多、达到了五条。 第三层是“特殊处理”,也只有一条:LDDQU。在这条指令主要针对视频解码,用来提高处理器对处理媒体数据结果的精确性。 第四层是“优化”,共有四条指令,分别是HADDPS,HSUBPS,HADDPD,HSUBPD,它们可以对程序起到自动优化的作用,对处理3D图形相当有用。 第五层是“超线程性能增强”,共有两条针对线程处理的指令:MONITOR, MWAIT,这有助于增加Intel超线程的处理能力、大大简化了超线程的数据处理过程。

SSE4.1改进视频处理

    SSE4.1是Intel在Penryn核心的Core 2 Duo与Core 2 Solo处理器时,新增的47条新多媒体指令集,用来加强视频编辑等方面的应用。另外,AMD也开发了属于自己的SSE4a多媒体指令集,并内建在Phenom与Opteron等K10架构处理器中,不过相关应用都差不多,并且无法与Intel的SSE4系列指令集相容。

你知道处理器指令集吗?指令集有何用

缓慢的视频处理

    据了解,在进行视频编码时需要进行动态预测(Motion Estimation)及差分编码方式去除相邻2张影像之相关性,这是一个非常复杂的运算动作。在没有SSE4指令集时,完成一个步骤需要以下指令语句:

  for (int moveblock=0;moveblock<16;moveblock++)

  for(int line=0; line<16; line++) // Does the 16 pixels large in 4 iteration

  {

  int i=0;

  sum0+=abs( pBlock1[j]-pBlock2)+abs(pBlock1[j+1]-pBlock2[i+1])+abs(pBlock1[j+2]-pBlock2[i+2])+abs(pBlock1[j+3]-pBlock2[i+3]); // Compare with 0 pixel offset

  sum1+=abs(pBlock1[j+1]-pBlock2)+abs(pBlock1[j+2]-pBlock2[i+1])+abs(pBlock1[j+3]-pBlock2[i+2])+abs(pBlock1[j+4]-pBlock2[i+3]); // Compare with 1 pixel offset

  sum2+=abs(pBlock1[j+2]-pBlock2)+abs(pBlock1[j+3]-pBlock2[i+1])+abs(pBlock1[j+4]-pBlock2[i+2])+abs(pBlock1[j+5]-pBlock2[i+3]); // Compare with 2 pixel offset

  sum3+=abs(pBlock1[j+3]-pBlock2)+abs(pBlock1[j+4]-pBlock2[i+1])+abs(pBlock1[j+5]-pBlock2[i+2])+abs(pBlock1[j+6]-pBlock2[i+3]); // Compare with 3 pixel offset

  sum4+=abs(pBlock1[j+4]-pBlock2)+abs(pBlock1[j+5]-pBlock2[i+1])+abs(pBlock1[j+6]-pBlock2[i+2])+abs(pBlock1[j+7]-pBlock2[i+3]); // Compare with 4 pixel offset

    sum5+=abs(pBlock1[j+5]-pBlock2)+abs(pBlock1[j+6]-pBlock2[i+1])+abs(pBlock1[j+7]-pBlock2[i+2])+abs(pBlock1[j+8]-pBlock2[i+3]); // Compare with 5 pixel offset

    sum6+=abs(pBlock1[j+6]-pBlock2)+abs(pBlock1[j+7]-pBlock2[i+1])+abs(pBlock1[j+8]-pBlock2[i+2])+abs(pBlock1[j+9]-pBlock2[i+3]); // Compare with 6 pixel offset

    sum7+=abs(pBlock1[j+7]-pBlock2)+abs(pBlock1[j+8]-pBlock2[i+1])+abs(pBlock1[j+9]-pBlock2[i+2])+abs(pBlock1[j+10]-pBlock2[i+3]); // Compare with 7 pixel offset

  i=4;

  j=moveblock+4;

  …

  … }

  }

  一大串的指令极度浪费处理器资源,而在支持SSE4指令集的处理器上,只需要采用4 SAD运算指令:

  MPSADBW xmm0,xmm1,0

  便完全代替了以上繁复的指令串,大幅提升动态预测(Motion Estimation)及差分编码的运算速度。

SSE4.2优化文本处理

    SSE4.2指令集相比SSE4.1新增了STTNI(STring & Text New Instructions)和ATA(Application Targeted Accelerators)两个部分。此次的改进不是针对多媒体而是加速对XML文本的字符串操作、存储校验等。

你知道处理器指令集吗?指令集有何用

漂亮的艺术字

    SSE4.2加入了七个新指令:CRC32、PCMPESTRI、PCMPESTRM、PCMPISTRI、PCMPISTRM、PCMPGTQ 与 POPCNT这样一来,采用SSE4.2指令集的处理器,XML的解析速度最高是原来的3.8倍,而指令周期节省可以达到2.7倍。

    在ATA领域,SSE 4.2指令集对于大规模数据集中处理和提高通信效率也都会发挥应有的作用,这些对于企业IT应用是有帮助大有裨益的。

SSE5融汇多条指令

    长久以来,Intel一直在处理器指令集方面具有霸主地位,而SSE5得出现就是AMD试图改变这一切。SSE5初期规划将加入超过100条新指令,其中最引人注目的就是三算子指令(3-Operand Instructions)及熔合乘法累积(Fused Multiply Accumulate)。

    三算子指令让处理器可将一个数学或逻辑函式库,套用到算子或输入资料。借由增加算子的数量,一个 x86 指令能处理二至三笔资料, SSE5允许将多个简单指令汇整成一个指令,达到更有效率的指令处理模式。提升为三运算指令的运算能力,是少数 RISC 架构的水平。

你知道处理器指令集吗?指令集有何用

AMD对“推土机”处理器抱厚望

    熔合乘法累积让允许建立新的指令,有效率地执行各种复杂的运算。熔合乘法累积可结合乘法与加法运算,透过单一指令执行多笔重复计算。透过简化程式码,让系统能迅速执行绘图着色、快速相片着色、音场音效,以及复杂向量演算等效能密集的应用作业。SSE5将很可能内建于AMD下一代Bulldozer(推土机)核心。

    除了以上几个常见到的指令集,还有两个“非主流”指令集:AVX与FMA。

    AVX是Intel的SSE延伸架构,如IA16至IA32般的把暂存器XMM 128bit提升至YMM 256bit,以增加一倍的运算效率。此架构支持了三运算指令(3-Operand Instructions),减少在编码上需要先复制才能运算的动作。在微码部分使用了LES LDS这两少用的指令作为延伸指令Prefix。

    FMA是Intel的AVX扩充指令集,是Fused Multiply Accumulate的简写,翻译过来就是熔合乘法累积。

你知道处理器指令集吗?指令集有何用

Intel Core i3-540

    Intel Core i3-540默认主频高达3.06GHz,基于双核心四线程设计,采用最新32nm设计。功耗仅73W,并集成733MHz的显示核心。支持MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T指令集。

● 总结

    现在我们算是对CPU中的指令集有了一番了解,在我们日后挑选处理器时,可不要忘了这个重要的参数。■<

0人已赞

关注我们

泡泡网

手机扫码关注