整数范围

编辑

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

MOS 6502微处理器,双列直插式封装格式,一种非常流行的8位芯片

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

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

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

时钟频率

编辑

逻辑分析仪显示一个同步的数据系统中的时间与状态

主条目:时钟频率

主频=外频×倍频。

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

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

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

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

并行

编辑

低标量CPU的运算过程示意。注意其需要15个循环以完成三个指令

主条目:并行计算

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

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

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

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

基本的管线结构示意。假设在最佳情况下,这种管线可以使CPU维持标量的效能

主条目:指令管线化和超纯量

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

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

简单的上标量管线。借由同时提取和分派两个指令,能够在一个时脉循环中完成最多两个指令

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

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

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

此两种简单的管线及上标量设计,均能透过允许单一处理器在一个时钟循环完成一个指令[注 12],提升指令管线化的效能。多数的近代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)非独立内存访问的方式来组织。[注 13]这些非常不同的方法,全部为了实现同一个目标,就是增加CPU同时处理多个线程的能力。

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

数据并行

编辑

主条目:向量处理器和SIMD

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

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

AMD Opteron六核心处理器

多核心

编辑

主条目:多核心

多核心中央处理器是在中央处理器晶片或封装中包含多个处理器核心,以偶数为核心数目较为常见,一般共用二级快取。现今使用双核心和四核心以上处理器的个人电脑已相当普遍。

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

2025-06-25 01:18:22