CPU 介绍


中央处理器 (英语:Central Processing Unit,缩写:CPU)是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。

【中央处理器操作原理】

    CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumann architecture)设计的设备。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼CPU的运作原理可分为四个阶段:提取、解码、执行和写回。

    第一阶段,提取,从程序内存中检索指令(为数值或一系列数值)。由程序计数器指定程序存储器的位置,程序计数器保存供识别当前程序位置的数值。换言之,程序计数器记录了CPU在当前程序里的踪迹。提取指令之后,PC根据指令式长度增加存储器单元[iwordlength]。指令的提取常常必须从相对较慢的存储器查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的缓存和管线化架构。

    CPU根据从存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码,其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的定址值:寄存器或存储器地址,以定址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体设备。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。

    在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算术逻辑单元将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位操作)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志寄存器里,溢出标志可能会被设置(参见以下的数值精度探讨)。

    最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的寄存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,如容量较大且较便宜的主存。某些类型的指令会操作程序计数器,而不直接产生结果数据。这些一般称作“跳转”并在程序中带来循环行为、条件性执行(透过条件跳转)和函数[jumps]。许多指令也会改变标志寄存器的状态比特。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志寄存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。

    在执行指令并写回结果数据之后,程序计数器的值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令地址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子设备中快速普及(常称为微控制器)[riscpipeline]。


【设计与实现】

整数范围

    CPU数字表示方法是一个设计上的选择,这个选择影响了设备的工作方式。一些早期的数字计算机内部使用电气模型来表示通用的十进制(基于10进位)记数系统数字。还有一些罕见的计算机使用三进制表示数字。几乎所有的现代的CPU使用二进制系统来表示数字,这样数字可以用具有两个值的物理量来表示,例如高低电平[binaryvoltage]等等。

    与数表示相关的是一个CPU可以表示的数的大小和精度,在二进制CPU情形下,一个位(bit)指的是CPU处理的数中的一个有意义的位,CPU用来表示数的位数量常常被称作"字长", "位宽", "数据通路宽度",或者当严格地涉及到整数(与此相对的是浮点数)时,称作"整数精度",该数量因体系结构而异,且常常在完全相同的CPU的不同部件中也有所不同。例如:一个8位的CPU可处理在八个二进制数字(每个数字具有两个可能的取值,0或1)表示范围内的数,也就是说,2的8次方或256个离散的数值。 实际上,整数精度在CPU可执行的软件所能利用的整数取值范围上设置了硬件限制。[softwareints]

    整数精度也可影响到CPU可寻址(定址)的内存数量。譬如,如果二进制的CPU使用32位来表示内存地址,而每一个内存地址代表一个八比特组,CPU可定位的容量便是2的32次方个比特组或4GB。以上是简单描述的CPU地址空间,通常实际的CPU设计使用更为复杂的寻址方法,例如为了以同样的整数精度寻址更多的内存而使用分页技术。

    更高的整数精度需要更多线路以支持更多的数字比特,也因此结构更复杂、更巨大、更花费能源,也通常更昂贵。因此尽管市面上有许多更高精准度的CPU(如16,32,64甚至128位),但依然可见应用软件执行在4或8位的微控制器上。越简单的微控制器通常较便宜,花费较少能源,也因此产生较少热量。这些都是设计电子设备的主要考量。然而,在专业级的应用上,额外的精度给予的效益(大多是给予额外的地址空间)通常显著影响它们的设计。为了同时得到高与低位宽度的优点,许多CPU依照不同功用将各部分设计成不一样的位宽度。例如IBM System/370使用一个原为32位的CPU,但它在其浮点单元使用了128位精度,以得到更佳的精确度与浮点数的表示范围。许多后来的CPU设计使用类似的混合位宽,尤其当处理器设计为通用用途,因而需要合理的整数与浮点数运算能力时。


时钟频率    内频=外频×倍频。

    大部分的CPU,甚至大部分的时序逻辑设备,本质上都是同步的。[seqlogic]也就是说,它们被设计和使用的前题是假设都在同一个同步信号中工作。这个信号,就是众所周知的时脉讯号,通常是由一个周期性的方波(构成)。通过计算电信号在CPU众多不同电路中的分支中循环所需要的最大时间,设计者们可为时脉讯号选择一个适合的周期。

    该周期必须比信号在延迟最大的情况下移动或者传播所需的时间更长。设计整个CPU在时钟信号的上升沿和下降沿附近移动数据是可能的。无论是在设计还是组件的维度看来,均对简化CPU有显著的优点。同时,它也存在CPU必须等候回应较慢组件的缺点。此限制已透过多种增加CPU并行运算的方法下被大幅的补偿了。(见下文)

    无论如何,结构上的改良无法解决所有同步CPU的弊病。比方说,时脉讯号易受其它的电子信号影响。在逐渐复杂的CPU中,越来越高的时钟频率使其更难与整个单元的时脉讯号同步。是故近代的CPU倾向发展多个相同的时脉讯号,以避免单一信号的延迟使得整个CPU失灵。另一个主要的问题是,时脉讯号的增加亦使得CPU产生的热能增加。持续变动的时钟频率使得许多组件切换(Switch)而不论它们是否处于运作状态。一般来说,一个处于切换状态的组件比处于静止状态还要耗费更多的能源。因此,时钟频率的增加使得CPU需要更有效率的冷却方案。

    其中一个处理切换不必要组件的方法称为时脉闸控,即关闭对不必要组件的时钟频率(有效的禁止组件)。但此法被认为太难实行而不见其低耗能通用性。[clockgating]另一个对全程时钟信号的方法是同时移除时钟信号。当移除全程时钟信号;使得设计的程序更加复杂时,异步(或无时脉)设计使其在能源消耗与产生热能的维度上更有优势。罕见的是,所有的CPU建造在没有利用全程时钟信号的状况。两个值得注意的示例是ARM("Advanced RISC Machine")顺从AMULET以及MIPS R3000兼容MiniMIPS。与其完全移除时脉讯号,部分CPU的设计允许一定比例的设备不同步,比方说使用不同步算术逻辑单元连接超标量管线以达成一部分的算术性能增进。在不将时脉讯号完全移除的情况下,不同步的设计可使其表现出比同步计数器更少的数学运算。因此,结合了不同步设计极佳的能源耗损量及热能产生率,使它更适合在嵌入式计算机上运作。


并行

    前面描述的CPU结构只能在同一时间点执行一个指令,这种类型的CPU被称为低标量。

    这一类型的CPU有一很大的缺点:效率低。由于只能执行一个指令,此类的进程给与低标量CPU固有的低性能。由于每次仅有一个指令能够被执行,CPU必须等到上个指令完成才能继续执行。如此便造成下标量CPU延宕在需要两个以上的时钟循环才能完成的指令。即便增加第二个执行单元(见下文)也不会大幅提升性能;除了单一沟道的延宕以外,双沟道的延宕及未使用的晶体管数量亦增加了。如此的设计使得不论CPU可使用的资源有多少,都仅能一次运行一个指令并可能达到标量的性能(一个指令需一个时脉循环)。无论如何,大部分的性能均为下标量(一个指令需超过一个时脉循环)。

    为了达成标量目标以及更佳的性能,导致使得CPU倾向平行运算的各种设计越来越多。提到CPU的平行,有两个字汇常用来区分这些设计的技术。指令平行处理(Instruction Level Parallelism, ILP)以增加CPU执行指令的速率(换句话说,增加on-die执行资源的利用),以及执行绪平行处理(Thread Level Parallelism, TLP)目的在增加执行绪(有效的个别程序)使得CPU可以同时执行。每种方法均可由其如何嵌入或相对有效(对CPU的性能)来区分。[parallelperformance]


指令级并发(Instruction level parallelism,ILP):指令管线化与超标量架构

    其中一种达成增加平行运算的方法,便是在主要指令完成执行之前,便进行指令提取及解码。这种最简易的技术,我们称为指令管线化,且其被利用在泰半现代的泛用CPU中。透过分解执行沟道至离散阶段,指令管线化可以两个以上的指令同时执行。相较于已被淘汰的组合管线,指令管线化不再使用等候指令完全在管线中退出才执行下一指令的技术。

    指令管线化产生了下一作业需要前一作业才可完成的可能性。此类状况又常称为相依冲突。解决的方法是,对此类的情况增加额外的注意,及在相依冲突发生时延迟一部分的指令。自然地,此种解决方法需要额外的循环,是故指令管线化的处理器比低标量处理器还要复杂。(虽然不是很显著)一个指令管线化的处理器的性能可能十分接近标量,只需禁止管线推迟即可。(在一个阶段需要超过一个以上的循环的指令)

    此外,对于指令管线化的改进启发了减少CPU组件闲置时间的技术。称为超标量的设计包括了一条长指令管线化及多个相同的执行单元。上标量管线的分派器同时读取及通过数个指令;分派器决定指令是否能够平行执行(同时执行)并分配到可执行的执行单元。大致上来说,一个上标量的CPU能够同时分派越多的指令给闲置的执行单元,就能够完成越多的指令。

    上标量CPU结构的设计中,最困难的部分便是创造一个有效率的分派器。分派器必须能够快速且正确的决定指令是否能够平行执行,并且让闲置的执行单元最小化。其需要指令管线化常时的充满指令流,且提升了在上标量结构中一定数量的CPU缓存。其亦催生了危害回避的技术,如分支预测、投机执行与跨序执行以维持高层次的性能。借由尝试预测特定的指令选择何分支(路径),CPU能够最小化整个指令管线等待特定的指令完成的次数。投机执行则是借着执行部分的指令以得知其是否在整个作业完成后仍被需要而提供适度的性能提升。跨序执行则是刷新指令执行的命令以降低数据相依。

    当不是所有的CPU组件均有上标量性能时,未达上标量的组件性能便会因定序推迟而降低。奔腾的原型有两个每一时脉循环可接收一个指令的上标量算术逻辑单元,但其浮点算术处理器(Floating Point Unit, FPU)不能在每一时脉循环接收一个指令。因此P5的性能只能算是整数上标量而非浮点上标量。英特尔Pentium结构的下一代P6加入了浮点运算处理器的上标量能力,因此在浮点指令上有显著的性能提升。

    此两种简单的管线及上标量设计,均能透过允许单一处理器在一个时钟循环完成一个指令[ipcrate],提升指令管线化的性能。多数的近代CPU设计至少都在上标量以上,且几乎所有十年内的泛用CPU均达上标量。近年来,一些重视高指令管线化的计算机将其从CPU的硬体移至软件。超长指令字符(的策略使得一部分的指令管线化成为软件,减少CPU推动指令管线化的工作量,并降低了CPU的设计复杂度。


线程级并发(Thread-level parallelism,TLP):同时执行绪执行或线程级并行处理

    另一个常用以增加CPU:平行运算性能的策略是让CPU有同时执行多个执行绪(程序)的能力。大致上说来,高同时执行绪平行执行(TLP)CPU比高指令平行执行来的有用。许多由克雷公司(Cray)公司于1970年代及1980年代晚期所首创的同时执行绪平行执行,专于该方法而启发了庞大的计算效力。(就时间上而言)事实上,TLP多线程运算自从1950年就已经开始被运用了(Smotherman 2005)。在单处理器设计中,两种主要实现TLP的设计方法是芯片级多处理(CMP)芯片层多线程处理和同步多线程(simultaneous multithreading,SMT)。同级别层多线程处理。在更高级层中,一台计算机中有多个单独的处理器,常常运用对称多处理机(SMP)和non-uniform memory access(NUMA)非独立内存访问的方式来组织。[singlechiptlp]这些非常不同的方法,全部为了实现同一个目标,就是增加CPU同时处理多个线程的能力。

    CMP和SMP这两种方法其实是非常相似的,而且是最直接的方法。这里有一些概念上的东西关于如何实两个或是两个以上完全单独的CPU。在CMP中,多个处理器内核会被放入同一个包中,有时会在非常相近的集成电路中。[cmp]另一方面SMP包含多个包在其中,NUMA和SMP很相像,但是NUMA使用非单一的内存访问方式。这些对于一台有着多个CPU的计算机来说是非常重要的,因为每个处理器访问内存的时间会很快的被SMP分享的模块消耗掉,因些会造成很严重的延迟,因为CPU要等待可用的内存.这时NUMA是个不错的选择,它可以允许有多个CPU同时存在一台计算机中而且SMP也可以同时实现.SMT有一些不同之处,就是SMT会尽可能的减少CPU处理能力的分布。TLP的实现实际上和超标量体系结构的实现有些相似,其实上它常常被用在超标量体系结构处理器中,如IBM的POWER5。相比于复制整个CPU,SMT会复制需要的部分来提取指令,加密和分配,就像计算机中的一般的寄存器一样。因此这样会使SMT CPU保持处理单位运作的连续,一些通常会提供给处理单位多个指令而且来自不同的软件线程,这和ILP结构很相似。相比于处理多个指令来自同一个线程,它会同时处理来自不同线程的多个指令。


数据并行

    上面提及过的处理器都是一些常量仪器[scalarvector],而针对向量处理的CPU是较不常见的类型,但它的重要性却越来越高。事实上,在计算机计算上,向量处理是很常见的。顾名思义,向量处理器能在一个命令周期(one instruction)处理多项数据,这有别于只能在一个命令周期内处理单一数据的常量处理器。这两种不同处理数据的方法,普遍分别称为‘单指令,多数据’(SIMD)及‘单指令,单数据’(SISD)。向量处理器最大的优点就是能够在同一个命令周期中对不同的工作进行优化,例如:求一大堆数据的总和及向量的数量积,更典型的例子就是多媒体应用程序(画像、影像、及声音)与及众多不同总类的科学及工程上的工作。当常量处理器只能针对一组数据于单一命令周期内完全执行提取、解码、执行和写回四个阶段的同时,向量处理器已能对较大型的数据如相同时间内执行相同动作。当然,这假设了这个应用程序于单一命令周期内对处理器进行多次要求。

    大多数早期的向量处理器,例如Cray-1,大多都只会用于和科研及密码学有关的应用程序。但是,随着多媒体向数字媒体转移,对于能做到‘单指令,多数据’的普通用途处理器需求大增。于是,在浮点计算器普及化不久,拥有‘单指令,多数据’功能的普通用途处理器便面世了。有些早期的‘单指令,多数据’规格,如英特尔的MMX,只能作整数运算。因为大多数要求‘单指令,多数据’的应用程序都要处理浮点数字,所以这个规格对软件开发者无疑是一个主要障碍。幸好,这些早期的设计慢慢地被改进和重新设计为现时普遍的‘单指令,多数据’新规格,AMD公司也推出了第一个真正能执行浮点SIMD指令集3DNow!,在每个时脉周期可得到4个单精确度浮点数结果,是当时一般x87浮点处理器的4倍。新规格通常都于一ISA关连着。近年,一些值得注意的例子一定要数英特尔的SSE和PowerPC相关的AltiVec(亦称为VMX)。[mmxsse]


多核心

    多核心中央处理器是在中央处理器芯片或封装中包含多个处理器核心,以偶数为核心数目较为常见,一般共享二级缓存。现今使用双核心和四核心以上处理器的个人计算机已相当普遍。另也有少数三核心、六核心、八核心、十核心处理器等。

    第一颗双核心处理器为IBM POWER4处理器,2012年IBM发布了最新8核心的POWER 7+处理器,拥有80MB L3缓存/芯片。


【性能】

    CPU的性能和速度取决于时钟频率(一般以赫兹或千兆赫兹计算,即hz与Ghz)和每周期可处理的指令(IPC),两者合并起来就是每秒可处理的指令(IPS)。[1] IPS值代表了CPU在几种人工指令序列下“高峰期”的运行率,指示和应用。而现实中CPU组成的混合指令和应用,可能需要比IPS值显示的,用更长的时间来完成。而内存层次结构的性能也大大影响中央处理器的性能。通常工程师便用各种已标准化的测试去测试CPU的性能,已标准化的测试通常被称为“基准”(Benchmarks)。如SPECint,此软仵试图模拟现实中的环境。测量各常用的应用程序,试图得出现实中CPU的绩效。

    提高计算机的处理性能,亦使用多核心处理器。原理基本上是一个集成电路插入两个以上的个别处理器(意义上称为核心)[2]。在理想的情况下,双核心处理器性能将是宏内核处理器的两倍。然而,在现实中,因不完善的软件算法,多核心处理器性能增益远远低于理论,增益只有50%左右。但增加核心数量的处理器,依然可增加一台计算机可以处理的工作量。这意味着该处理器可以处理大量的不同步的指令和事件,可分担第一核心不堪重负的工作。有时,第二核心将和相邻核心同时处理相同的任务,以防止崩溃。


【实际应用】

    中央处理器大规模应用在个人计算机上,现今计算机可进入家庭。全因集成电路的发展,令PC在大小、性能以及价位等多个方面均有长足的进步。现今中央处理器价钱平宜,用户可自行组装个人计算机。主板等主要计算机组件,均配合中央处理器设计。不同类型的中央处理器安装到主板上不同类型的CPU插槽中(如英特尔的LGA 1151、AMD的Socket AM4),令中央处理器变得更省电,温度更低。大多数IBM PC兼容机(Pentium以后被称为“标准PC”(Standard PC))使用x86架构的处理器,他们主要由英特尔和超微两家公司生产,此外威盛电子也有参与中央处理器的生产。但与IBM PC兼容机不同,在2006年之前苹果计算机所使用的处理器一直是IBM PowerPC RISC,之后的苹果计算机转而采用英特尔的处理器,以及EFI固件。可见中央处理器在现代计算机的重要地位。


上一篇 下一篇

评论

登录后可发表评论