CPU架构与技术发展详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CPU架构与技术发展详解
来源: 时间: 2010-06-22 作者: apollo
CPU是中央处理单元(Central Processing Unit)的缩写,它可以被简称做微处理器(Microprocessor),不过经常被人们直接称为处理器(processor)。CPU是计算机的核心,其重要性好比大脑对于人一样,因为它负责处理、运算计算机内部的所有数据。下面我们从CPU的发展历程来看看CPU架构和技术的发展。
整合浮点运算协处理器
首先我们来重拾一个几乎快要被遗忘的名词——协处理器,它是一种芯片,用于减轻系统微处理器的特定处理任务,早些年协处理器主要是用以辅助进行浮点运算。
★最初的CPU只能进行整点运算,浮点运算效率极低
CPU最基本的运算就是“加减乘除”,但实际上计算机只能用加法器来完成整数以及固定小数点位置(整点)的算术运算,而不能处理小数点可以浮动的数值(浮点)。对于小数多采用的是二进制的科学计数法、也就是浮点数表示法:尾数、阶数符号位各占一位,然后再对其余数位尾数、阶数的有效数位合理分配。
在CPU运算时,浮点数的运算量远比整数复杂,因为不仅尾数要参与运算,阶数也要参与,并且需要对尾数和阶数的符号位都进行处理,所以,最早的CPU并没有能力进行浮点运算(8088/8086,80286,80386SX),需要浮点运算时,由CPU 通过软件模拟来实现,所以,进行浮点运算时就会慢很多。
★协处理器诞生,专门处理浮点运算
8086处理器和它的协处理器8087
8086是当今CPU的鼻祖,所谓X86架构也就是指8086处理器所开创的指令集体系。为了弥补8086在进行浮点运算时的不足,Intel与1980年设计了8087数学协处理器,并且为X86体系推出了第一个浮点格式IEE754。8087提供两个基本的32/64bit浮点资料形态和额外的扩展80bit内部支援来改进复杂运算之精度。除此之外,8087还提供一个80/17bit封装BCD (二进制编码之十进制)格式以及16/32/64bit 整数资料形态。
386处理器和它的协处理器387
X87协处理器新增约60个指令给程序员,所有的指令都是以“F”开头跟其他的标准8086整数运算指令有所区别,举例来说,相对于ADD/MUL,8087提供FADD/FMUL。
8087是于1980年发布,然后被80287、80387DX/SX和487SX所取代。
★协处理器被整合进入CPU内部
以往,协处理器都是可选配件,在主板上X86处理器旁边一般都会为X87设计一个空的插槽,只有当用户确实有需要时才会专门购买相应的X87协处理器插进去,来加速浮点运算。
486DX是第一颗整合了浮点运算协处理器的产品,相当于486SX+487SX
随着时代的发展,越来越多的程序要求使用更高精度的浮点运算,X87协处理器几乎成为必备品。于是在制造工艺日趋成熟之后,Intel在486一代将X86和X87整合在了一起,浮点运算成为了CPU的一项基本功能,而且重要性越来越大。
Intel 486DX、Pentium之后的CPU都内含了协处理器,AMD K5、K6之后的CPU都内建了协处理器,所以此后就很少有人会提及协处理器的概念了。
扩展指令集加速浮点运算
所谓X86架构的处理器就是采用了Intel X86指令集的处理器,X86指令集是Intel公司为其第一块16位处理器i8086所专门开发的。而IBM在1981年所推出的第一台PC机上所使用的处理器i8088(i8086的简化版)也是使用的X86指令集,但是为了增强计算机的浮点运算能力,增加了X87数学协助处理器并引入了X87指令集,于是就将采用了X86指令集和X87指令集的处理器统称为X86架构的处理器。
X86基本指令集包括了:数据传输、算术运算、逻辑运算、串指令、程序转移、伪指令、寄存器、位操作、控制指令和浮点运算指令等十大类无数条。而Intel和AMD桌面级处理器在X86指令集的基础上,为了提升处理器各方面的性能,所以又各自开发新的指令集,它们被称为处理器扩展指令集。
扩展指令集能够大幅提高CPU在某些特定应用下的性能,如多媒体、3D、浮点运算等,其设计初衷与协处理器是异曲同工的,但协处理器需要增加额外的运算单元,而扩展指令集只需要加入新的指令和算法即可,无需设计新的运算单元,但必须要软件支持才能发挥功效。
★MMX指令集:增强多媒体性能
MMX(Multi Media eXtension 多媒体扩展指令)指令集是Intel公司在1996年为旗下的Pentium系列处理器所开发的一项多媒体指令增强技术。MMX指令集中包括了57条多媒体指令,通过这些指令可以一次性处理多个数据,在处理结果超过实际处理能力的时候仍能够进行正常处理,如果在软件的配合下,可以得到更强的处理性能。
MMX指令集非常成功,在之后生产的各型CPU都包括这些指令集。据当年Tom's Hardware测试,即使最慢的Pentium MMX 166MHz也比Pentium 200MHz普通版要快。
Intel Pentium With MMX,首次支持MMX
但是,MMX指令集的问题也是比较明显的,MMX指令集不能与X86的浮点运算指令同时执行,必须做密集式的交错切换才可以正常执行,但是这样一来,就会造成整个系统运行速度的下降。
★3DNow!指令集:
3DNow!指令集最由AMD公司所推出的,该指令集应该是在SSE指令之前推出的,被广泛运用于AMD的K6-2和K7系列处理器上,拥有21条扩展指令集。在整体上3DNow!的SSE非常相相似,它们都拥有8个新的寄存器,但是3DNow!是64位的,而SSE是128位。
AMD K62加入3DNow!指令集
所以3DNow!它只能存储两个浮点数据,而不是四个。但是它和SSE的侧重点有所不同,3DNow!指令集主要针对三维建模、坐标变换和效果渲染等3D数据的处理,在相应的软件配合下,可以大幅度提高处理器的3D处理性能。AMD公司后来又在Athlon系列处理器上开发了新的Enhanced 3DNow!指令集,新的增强指令数达了52个,以致目前最为流行的Athlon 64系列处理器还是支持3DNow!指令的。
★SSE指令集:加强浮点和3D性能
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指令集的消息。