
参数所指定的目标页面不存在,建议更正成正确的存在页面,或直接建立以下其中一个页面(建立前请先搜寻是否有合适的存在页面可以取代):
注意如果条目名称是繁体字要使用繁体的“消歧義”,简体字要使用简体的“消歧义”;名称繁简混用的页面将会被快速删除。但如果条目名称的繁简写法是相同的话,可任选其一。
以下为本条目单独的全文转换,请从本页面进行编辑:
字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。
字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。
中央处理器(Central Processing Unit,CPU),是电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。所谓计算机的可编程性主要是指对CPU的编程。CPU、内部存储器和输入/输出设备是现代电脑的三大内核部件。由集成电路制造的CPU,20世纪70年代以前,本来是由多个独立单元构成,后来发展出微处理器CPU复杂的电路可以做成单一微小功能强大的单元。
“中央处理器”这个名称,笼统地说,是对一系列可以执行复杂的计算机程序的逻辑机器的描述。这个空泛的定义很容易地将在“CPU”这个名称被普遍使用,之前的早期计算机也包括在内。无论如何,至少从20世纪60年代早期开始(Weik 1961),这个名称及其缩写已开始在电子计算机产业中得到广泛应用。尽管与早期相比,“中央处理器”在物理形态、设计制造和具体任务的执行上有了戏剧性的发展,但是其基本的操作原理一直没有改变。
早期的中央处理器通常是为大型及特定应用的计算机而定制。但是,这种昂贵的为特定应用定制CPU的方法很大程度上已经让位于开发便宜、标准化、适用于一个或多个目的的处理器类。这个标准化趋势始于由单个晶体管组成的大型机和微机年代,随着集成电路的出现而加速。IC使得更为复杂的CPU可以在很小的空间中设计和制造(在微米的量级)。CPU的标准化和小型化都使得这一类数字设备(港译-电子组件)在现代生活中的出现频率远远超过有限应用专用的计算机。现代微处理器出现在包括从汽车到手机到儿童玩具在内的各种物品中。
目录 |
在现今的CPU出现之前,如同埃尼阿克(Electronic Numerical Integrator and Computer)之类的计算机在执行不同程序时,必须经过一番线路调整才能启动。由于它们的线路必须被重设才能执行不同的程序,这些机器通常称为“固定程序计算机”(fixed-program computer)。而由于CPU这个词指称为执行软件(计算机程序)的装置,那些最早与储存程序型计算机(stored-program computer)一同登场的装置也可以被称为CPU。
储存程序型计算机的主意早已体现在ENIAC的设计上,但最终还是被省略以期早日完成。在1945年6月30日,ENIAC完成之前,著名数学家冯纽曼发表名为"First Draft of a Report on the EDVAC"的论文。它揭述储存程序型计算机的计划将在1949年正式完成(冯诺依曼1945)。EDVAC的目标是执行一定数量与种类的指令(或操作),这些指令结合产生出可以让EDVAC(Electronic Discrete Variable Automatic Computer)执行的有用程序。特别的是,为EDVAC而写的程序是储存在高速计算机内存中,而非由实体线路组合而成。这项设计克服了ENIAC的某些局限——即花费大量时间与精力重设线路以执行新程序。在冯诺依曼的设计下,EDVAC可以借由改变内存储存的内容,简单更换它执行的程序(软件)。[1]
值得注意的是,尽管冯诺依曼由于设计了EDVAC,使得他在发展储存程序型计算机上的贡献最为显著,但其他早于他的研究员如Konard Zuse也提出过类似的想法。另外早于EDVAC完成,利用哈佛架构制造的马克一号,也利用打孔纸带而非电子内存用作储存程序的概念。冯诺依曼架构与哈佛架构最主要的不同在于后者将CPU指令与资料分开存放与处置,而前者使用相同的内存位置。大多近代的CPU依照冯诺依曼架构设计,但哈佛架构一样常见。
身为数位装置,所有CPU处理不连续状态,因此需要一些转换与区分这些状态的基础元件。在市场接受晶体管前,继电器与真空管常用在这些用途上。虽然这些材料速度上远优于纯粹的机械构造,但是它们有许多不可靠的地方。例如以继电器建造直流时序逻辑回路需要额外的硬件以应付接触点跳动问题。而真空管不会有接触点跳动问题,但它们必须在启用前预热,也必须同时停止运作。[2]通常当一根真空管坏了,CPU必须找出损坏元件以置换新管。因此早期的电子真空管式计算机快于电子继电器式计算机,但维修不便。类似EDVAC的真空管计算机每隔八小时便会损坏一次,而较慢较早期的马克一号却不太发生故障(Weik 1961:238)。但在最后,由于速度优势,真空管计算机支配当时的计算机世界,尽管它们需要较多的维护照顾。大多早期的同步CPU,其时钟频率(clock rate)低于近代的微电子设计(见下列对于时钟频率的讨论)。那时常见的时钟频率为100千赫兹到4百万赫兹,大大受限于内建切换装置的速度。
由于许多科技厂家投入更小更可靠的电子装置,设计CPU变得越来越复杂。晶体管的面世便是第一个CPU的飞跃进步。1950到60年代的晶体管CPU不再以体积庞大、不可靠与易碎的开关元件(例如继电器与真空管)建造。借由这项改良,更复杂与可靠的CPU便被建造在一个或多个包含分立(离散)元件的印刷电路板上。
在此时期,将许多晶体管放置在拥挤空间中的方法大为普及。集成电路(IC)将大量的晶体管集中在一小块半导体片,或芯片(chip)上。刚开始只有非常基本、非特定用途的数字电路小型化到IC上(例如NOR逻辑闸)。以这些预装式IC为基础的CPU称为小规模集成电路(SSI)装置。SSI IC,例如装置在阿波罗导航计算机上的那些计算机,通常包含数十个晶体管。以SSI IC建构整个CPU需要数千个独立的芯片,但与之前的分立晶体管设计相比,依然省下很多空间与电力。肇因于微电子科技的进步,在IC上的晶体管数量越来越大,因此减少了建构一个完整CPU需要的独立IC数量。“中规模集成电路”(MSI)与“大规模集成电路”(LSI)将内含的晶体管数量增加到成百上万。
1964年IBM推出了System/360计算机架构,此架构让一系列速度与性能不同的IBM计算机可以运行相同的程序。此确实为一项创举,因为当时的计算机大多互不兼容,甚至同一家厂商制造的也是如此。为了实践此项创举,IBM提出了微程序(microprogram 或 microcode)概念,此概念依然广泛使用在现代CPU上(Amdahl et al. 1964)。System/360架构由于太过成功,因此支配了大型计算机数十年之久,并留下一系列使用相似架构,名为IBM zSeries的现代主机产品。同一年(1964),数字设备公司(DEC)推出另一个深具影响力且瞄准科学与研究市场的计算机,名为PDP-8。DEC稍后推出非常有名的PDP-11,此产品原先计划以SSI IC构组,但在LSI技术成熟后改为LSI IC。与之前SSI和MSI的祖先相比,PDP-11的第一个LSI产品包含了一个只用了4个LSI IC的CPU(Digital Equipment Corporation 1975)。
晶体管计算机有许多前一代产品没有的优点。除了可靠度与低耗电量之外,由于晶体管的状态转换时间比继电器和真空管短得多,CPU也就拥有更快的速度。幸亏可靠度的提升与晶体管转换器的切换时间缩短,CPU的时钟频率在此时期达到十几百万赫兹。另外,由于分立晶体管与IC CPU的使用量大增,新的高性能设计,例如SIMD(单指令多数据)、向量处理器(vector processor)开始出现。这些早期的实验性设计,刺激了之后超级计算机(例如克雷公司)的崛起。
自从微处理器在1970年代发表之后,便大大影响了CPU的设计与实作。自1970年第一款微处理器(Intel 4004)与第一款广受使用的Intel 8080在1974年发表以来,这类型的CPU几乎完全取代了其他CPU的实作方法。当时的大型主机与微计算机-业者开发了专利IC的设计程序以改进他们的旧计算机架构,最终推出可以向下兼容他们的旧硬件与软件的指令集。与当时刚发展,并在之后普及大众的个人计算机相结合。"CPU"这个词现在几乎等同于微处理器。
前几世代的CPU实作,是在一或多个电路版上放置几个分散的元件与数量众多的小IC(积体电路)。而微处理器则是制作成几个少量的IC,通常是一个。由于物理因素,例如降低寄生电容(parasitic capacitance)的门槛值,此种单芯片的小尺寸CPU设计让它有更快的反应能力。这使得同步微处理器拥有数十兆赫到数百万兆赫的执行频率。另外,由于在一个IC放置小型晶体管的技术持续进步,在单个CPU上的晶体管数量与复杂度都在戏剧性地增加。此广为人知的现象称为摩尔定律(Moore's law),它成功预言了CPU与其他IC的复杂度与时俱增的性质。
当CPU的复杂度、尺寸、结构与型态在这六十年间剧烈改变,它的基本设计与功能并没有太大改变。当今所有普通CPU都几乎可以用冯诺依曼机器来解释。
由于前述的摩尔定律依旧没有被打破,很自然地让人想像IC与晶体管工业的极限何在。极端小型化电子闸门导致各种现象如电迁移(electromigration)与次临界漏电(subthreshold leakage)效应变得相当明显。这些新效应使得研究人员试图研发新的计算方法,例如量子计算机以及扩展平行运算和其他运用冯诺依曼模型的方法。
CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的馮·諾伊曼架构设计的装置。程序以一系列数字储存在计算机记忆体中。差不多所有的馮·諾伊曼CPU的运作原理可分为四个阶段:提取(fetch)、解码(decode)、执行(execute)和写回(writeback)。
第一阶段,提取,从程序记忆体中检索指令(为数值或一系列数值)。由程序计数器(PC)指定程序记忆体的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加记忆体单元[iwordlength]。指令的提取常常必须从相对较慢的记忆体查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的高速缓存和管线化架构(见下)。
CPU根据从记忆体提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码(opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(addition)运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的寻址值:缓存器或记忆体地址,以寻址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体装置。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。
在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算数逻辑单元(ALU,arithmetic logic unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志缓存器里,运算溢出(arithmetic overflow)标志可能会被设置(参见以下的数值精度探讨)。
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果极常被写进CPU内部的缓存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体。某些类型的指令会操作程序计数器,而不直接产生结果数据。这些一般称作“跳转”(jumps)并在程序中带来循环行为、条件性执行(透过条件跳转)和函数[jumps]。许多指令也会改变标志缓存器的状态位。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志缓存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。
在执行指令并写回结果数据之后,程序计数器的值会递增,反覆整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令地址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为微控制器(microcontrollers))[riscpipeline]。
CPU数字表示方法是一个设计上的选择,这个选择影响了设备的工作方式。一些早期的数字计算机内部使用电气模型来表示通用的十进制(基于10进位)数位系统数字。还有一些罕见的计算机使用三进制表示数字。几乎所有的现代的CPU使用二进制系统来表示数字,这样数字可以用具有两个值的物理量来表示,例如高低[binaryvoltage]等等。
与数表示相关的是一个CPU可以表示的数的大小和精度,在二进制CPU情形下,一个比特(bit)指的是CPU处理的数中的一个有意义的位,CPU用来表示数的比特数量常常被称作"字长"(Word Size), "位宽"(bit width), "数据通路宽度"(data path width), 或者当严格地涉及到整数(与此相对的是浮点数)时,称作"整数精度"(integer precision),该数量因体系结构而异,且常常在完全相同的CPU的不同部件中也有所不同。例如:一个8比特的CPU可处理在八个二进制数码(每个数码具有两个可能的取值,0或1)表示范围内的数, 也就是说, 28或256个离散的数值。 实际上, 整数精度在CPU可执行的软件所能利用的整数取值范围上设置了硬件限制。[softwareints]
整数精度也可影响到CPU可寻址(寻址)的内存单元数量。譬如,如果二进制的CPU使用32比特来表示内存地址,而每一个内存地址代表一个八位组,CPU可定位的容量便是232个位组或4GB。以上是简单描述的CPU地址空间(address space),通常实际的CPU设计使用更为复杂的寻址方法,例如为了以同样的整数精度寻址更多的内存而使用分页(paging)技术。
更高的整数精度需要更多线路以支持更多的数字位,也因此结构更复杂、更巨大、更花费能源,也通常更昂贵。因此尽管市面上有许多更高精准度的CPU(如 16,32,64甚至128比特),但依然可见应用软件执行在4或8比特的微控制器(microcontrollers)上。越简单的微控制器通常较便宜,花费较少能源,也因此产生较少热量。这些都是设计电子设备的主要考量。然而,在专业级的应用上,额外的精度给予的效益(大多是给予额外的地址空间)通常显著影响它们的设计。为了同时得到高与低比特宽度的优点,许多CPU依照不同功用将各部分设计成不一样的比特宽度。例如IBM的System/370使用一个原为32比特的CPU,但它使用了128比特精度在其浮点(floating point)单元,以得到更佳的精确度与浮点数的表示范围 (Amdahl et al. 1964)。许多后来的CPU设计使用类似的混合位宽,尤其当处理器设计为通用用途,因而需要合理的整数与浮点数运算算能力时。
主频=外频×倍频。
大部分的CPU,甚至大部分的时序逻辑设备,本质上都是同步的。[seqlogic] 也就是说,它们被设计和使用的前提是假设都工作在一个同步信号中。这个信号,就是众所周知的时钟信号(Clock Signal),通常是由一个周期性的方波(构成)。通过计算电信号在CPU众多电路中不同的分支中循环所需要的最大时间,设计者们可以为时钟信号选择一个适合的周期。
该周期必须比信号在延迟最大的情况下移动或者传播所需的时间更长。设计整个CPU在时钟信号的上升沿和下降沿附近移动数据是可能的。无论是在设计还是元件的维度看来,均对简化CPU有显著的优点。同时,它也存在CPU必须等候回应较慢元件的缺点。此限制已透过多种增加CPU并行运算的方法下被大幅的补偿了。(见下文)
无论如何,结构上的改良无法解决所有同步CPU的弊病。比方说,时钟信号易受其它的电子信号影响。在逐渐复杂的CPU中,越来越高的时钟频率使其更难与整个单元的时钟信号同步(synchronized)。是故近代的CPU倾向发展多个相同的时钟信号,以避免单一信号的延迟使得整个CPU失灵(Malfunction)。另一个主要的问题是,时钟信号的增加亦使得CPU产生的热能增加。持续变动的时钟频率使得许多元件切换(Switch)而不论它们是否处于运作状态。一般来说,一个处于切换状态的元件比处于静止状态还要耗费更多的能源。因此,时钟频率的增加使得CPU需要更有效率的冷却方案。
其中一个处理切换不必要元件的方法称为时钟選通(Clock gating),即关闭对不必要元件的时钟频率(有效的禁止元件)。但此法被认为太难实行而不见其低耗能通用性。[:en:clockgating] 另一个对全程时钟信号的方法是同时移除时钟信号。当移除全程时钟信号使得设计的程序更加复杂时,异步(或无时钟)设计使其在能源消耗与产生热能的维度上更有优势。罕见的是,所有的CPU建造在没有利用全程时钟信号的状况。两个值得注意的示例是ARM(Advanced RISC Machine)顺从AMULET以及MIPS R3000兼容MiniMIPS。与其完全移除时钟信号,部份CPU的设计允许一定比例的装置不同步,比方说使用不同步算術逻辑單元连接上标流水線以达成一部份的算数效能增进。在不将时钟信号完全移除的情况下,不同步的设计可使其表现出比同步计数器(Synchronous counterparts)更少的数学运算。因此,结合了不同步设计极佳的能源耗损量及热能逞生率,使它更适合在嵌入式計算機上运作。 (Garside et al. 1999).
前面描述的CPU结构只能在同一时间点执行一个指令,这种类型的CPU被称为低标量(subscalar)。
这一类型的CPU有一很大的缺点,既是效率低。由于只能执行一个指令,此类的进程给与低标量CPU固有的低效能。由于每次仅有一个指令能够被执行,CPU必须等到上个指令完成才能继续执行。如此便造成低标量CPU延宕(Hung up)在需要两个以上的时鐘循环才能完成的指令。即便增加第二个执行单元(见下文)也不会大幅提升效能;除了单一通道的延宕以外,双通道的延宕及未使用的晶体管数量亦增加了。如此的设计使得不论CPU可使用的资源有多少,都仅能一次运行一个指令并可能达到标量(Scalar)的效能(一个指令需一个时鐘循环)。无论如何,大部份的效能均为低标量(一个指令需超过一个时鐘循环)。
为了达成标量目标以及更佳的效能,导致使得CPU倾向並行运算的各种设计越来越多。提到CPU的並行,有两个字汇常用来区分这些设计的技术。指令平行处理(Instruction Level Parallelism, ILP)以增加CPU执行指令的速率(换句话说,增加on-die执行资源的利用),以及执行绪平行处理(Thread Level Parallelism, TLP)目的在增加执行绪(有效的个别程序)使得CPU可以同时执行。每种方法均可由其如何嵌入或相对有效(对CPU的效能)来区分。[parallelperformance]
其中一种达成增加並行計算的方法,便是在主要指令完成执行之前,便进行指令提取及解码。这种最简易的技术,我们称为指令流水線技術,且其被利用在泰半现代的泛用CPU中。透过分解执行通道(Execution pathway)至离散阶段,指令流水線技術可以两个以上的指令同时执行。相较于已被淘汰的匯編管线(Assembly line),指令流水線技術不再使用等候指令完全在流水線中退出才执行下一指令的技术。
指令流水線技術产生了下一作业(Operation)需要前一作业才可完成的可能性。此类状况又常称为相依冲突(Dependency conflict)。解决的方法是,对此类的情况增加额外的注意,及在相依冲突发生时延迟一部份的指令流水線。自然地,此种解决方法需要额外的循环,是故指令流水線技術化的处理器比低标量处理器还要复杂。(虽然不是很显著)一个流水線技術的处理器的效能可能十分接近标量,只需禁止流水線推迟(Pipeline stalls)即可。(在一个阶段需要超过一个以上的时鐘循环的指令)
此外,对于指令流水線技術的改进启发了减少CPU元件闲置时间的技术。称为上标量(superscalar)的设计包括了一条长指令流水線技術及多个相同的执行单元。上标量流水線的分派器同时读取及通过数个指令;分派器决定指令是否能够並行执行(同时执行)并分配到可执行的执行单元。大致上来说,一个上标量的CPU能够同时分派越多的 指令给闲置的执行单元,就能够完成越多的指令。
上标量CPU结构的设计中,最困难的部份便是创造一个有效率的分派器。分派器必须能够快速且正确的决定指令是否能够並行执行,并且让闲置的执行单元最小化。其需要指令流水線技術常时的充满指令流,且提升了在上标量结构中一定数量的CPU緩存。其亦催生了危害回避的技术,如分枝预测(branch prediction)、投机执行(speculative execution)与跨序执行(out-of-order execution)以维持高层次的效能。借由尝试预测特定的指令选择何分枝(路径),CPU能够最小化整个指令流水線等待特定的指令完成的次数。投机执行则是借着执行部份的指令以得知其是否在整个作业完成后仍被需要而提供适度的效能提升。跨序执行则是刷新指令执行的命令以降低数据相依。
当不是所有的CPU元件均有上标量效能时,未达上标量的元件效能便会因調度推迟(scheduling stall)而降低。Intel Pentium (P5)的原型有两个每一时鐘循环可接收一个指令的上标量算術逻辑部件,但其浮点运算处理器(Floating Point Unit, FPU)不能在每一时鐘循环接收一个指令。因此P5的效能只能算是整数上标量而非浮点上标量。英特尔Pentium结构的下一代P6加入了浮点运算处理器的上标量能力,因此在浮点指令上有显著的效能提升。
此两种简单的流水線及上标量设计,均能透过允许单一处理器在一个时鐘循環完成一个指令(Instruction per cycle, IPC) [ipcrate] ,提升指令流水線技術的效能。多数的近代CPU设计至少都在上标量以上,且几乎所有十年内的泛用CPU均达上标量。近年来,一些重视高指令流水線技術的计算机将其从CPU的硬体移至软件(Its software interface, ISA)。超长指令字符(Very long instruction word, VLIW)的策略使得一部份的指令流水線技術成为软件,减少CPU推动指令流水線技術的工作量,并降低了CPU的设计复杂度。
另一个常用以增加CPU並行运算效能的策略是让CPU有同时执行多个执行绪(程序)的能力。大致上说来,高同时执行绪並行执行(TLP)CPU比高指令並行执行来的有用。许多由Cray公司于1970年代及1980年代晚期所首创的同时执行绪並行执行,专于该方法而启发了庞大的计算效力。(就时间上而言)事实上,TLP多线程运算自从1950年就已经开始被运用了(Smotherman 2005)。在单处理器设计中,两种主要实现TLP的设计方法是芯片级多处理(CMP)芯片层多线程处理和simultaneous multithreading(SMT)。同级别层多线程处理。在更高级层中,一台计算机中有多个单独的处理器,常常运用对称多处理机(SMP)和non-uniform memory access(NUMA)非独立内存访问的方式来结织。这些非常不同的方法,全部为了实现同一个目标,就是增加CPU同时处理多个线程的能力。
CMP和SMP这两种方法其实是非常相似的,而且是最直接的方法。这里有一些概念上的东西关于如何实两个或是两个以上完全单独的CPU。在CMP中,多个处理器内核会被放入同一个包中,有时会在非常相近的集成电路中。另一方面SMP包含多个包在其中,NUMA和SMP很相像,但是nUMA使用非单一的内存访问方式。这些对于一台有着多个CPU的电脑来说是非常重要的,因为每个处理器访问内存的时间会很快的被SMP分享的模块消耗掉,因些会造成很严重的延迟,因为CPU要等待可用的内存.这是NUMA是个不错的选择,它可以允许有多个CPU同时存在一台电脑中而且SMP也可以同时实现.SMT有一些不同之处,就是SMT会尽可能的减少CPU处理能力的分布。TLP的实现实际上和超标量体系结构的实现有些相似,其实上它常常被用在超标量体系结构处理器中,如IBM的POWER5。相比于复制整个CPU,SMT会复制需要的部分来提取指令,加密和分配,就像记算机中的一般的寄存器一样。因此这样会使SMT CPU保持处理单位其作的连续性,因些通常会提供给处理单位多个指令而且来自不同的软件线程,这和LTP结构很相似。相比于处理多个指令来自同一个线程,它会同时处理来自不线程的多个指令。
上面提及过的处理器都是一些常量仪器[scalarvector],而针对向量处理的 CPU 是较不常见的类型,但它的重要性却越来越高。事实上,在计算机计算上,向量处理是很常见的。顾名思义,向量处理器能在一个命令周期(one instruction)处理多项数据,这有别于只能在一个命令周期内处理单一数据的常量处理器。 这两种不同处理数据的方法,普遍分别称为‘单指令,多数据’(SIMD)及‘单指令,单数据’(SISD)。向量处理器最大的优点就是能够在同一个命令周期中对不同的工作进行优化,例如:求一大堆数据的总和及向量的积(dot product),更典型的例子就是多媒体应用程序(画像、图像、及声音)与及众多不同总类的科学及工程上的工作。当常量处理器只能针对一组数据于单一命令周期内完全执行提取、解码、执行和写回四个阶段的同时,向量处理器已能对较大型的数据如相同时间内执行相同动作。当然,这假设了这个应用程序于单一命令周期内对处理器进行多次要求。
大多数早期的向量处理器,例如Cray-1,大多都只会用于和科研及密码学的应用程序。但是,随着多媒体向数位媒体转移,对于能做到‘单指令,多数据’的普通用途处理器需求大增。于是,在浮点计算器普及化不久,拥有‘单指令,多数据’功能的普通用途处理器便面世了。有些早期的‘单指令,多数据’规格,如英特尔的MMX,只能作整数运算。因为大多数要求‘单指令,多数据’的应用程序都要处理浮点数字,所以这个规格对软件开发者无疑是一个主要障碍。幸好,这些早期的设计慢慢地被改进和重新设计为现时普遍的‘单指令,多数据’新规格,AMD公司也推出了第一个真正能执行浮点SIMD指令集3DNow!,在每个时脉周期可得到4个单精确度浮点数结果,是当时一般x87浮点处理器的4倍。新规格通常都于一 ISA 关连着。近年,一些值得注意的例子一定要数英特尔的SSE和PowerPC相关的 AltiVec(亦称为VMX)。[mmxsse]
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History