CPU常日被称为打算机的大脑,就像人的大脑一样,它由几个部分组成,个中包括吸收信息的部分,存储信息的部分,处理信息的部分,帮助输出信息的部分等等。这些部分协同事情以处理信息。
在本日的解文章中,我们将先容构成CPU的关键元素以及它们如何共同为打算机供应动能。
CPU蓝图:ISA
剖析任何CPU时,您首先碰着的便是指令集体系构造(ISA)。这是有关CPU如何运行以及所有内部系统如何交互的图形化蓝图。就像同一物种中有许多品种的狗一样,可以在CPU上构建许多不同类型的ISA。两种最常见的类型是x86(在台式机和条记本电脑中找到)和ARM(在嵌入式和移动设备中找到)。

还有其他一些像MIPS,RISC-V和PowerPC这样的小众运用程序。ISA将指定CPU可以处理哪些指令,如何与内存和缓存交互,如何在多个处理阶段划分事情等等。
为了覆盖CPU的紧张部分,我们将遵照一条指令在实行时所采取的路径。不同类型的指令可能遵照不同的路径,并利用CPU的不同部分,但在这里我们将进行概括以涵盖最大部分。我们将从单核处理器的最基本设计开始,并随着我们朝着更当代的设计逐步增加繁芜性。
掌握单元和数据路径
CPU可以分为两部分:掌握单元和数据路径。想象一辆火车。引擎是火车的动力来源,但指挥员却在幕后拉动操纵杆并掌握引擎的各个方面。CPU是相同的办法。
数据路径就像引擎一样,顾名思义,是数据在处理过程中流动的路径。数据路径吸收输入,处理它们,并在完成后将它们发送到精确的位置。掌握单元见告数据路径如何事情。根据指令,数据路径会将旗子暗记路由到不同的组件,打开和关闭数据路径的不同部分,并监视CPU的状态。
指令周期-获取
我们的CPU必须做的第一件事是弄清楚下一步要实行什么指令,然后将它们从内存转移到CPU中。指令由编译器产生,并且特定于CPU的ISA。ISA将共享最常见的指令类型,例如加载,存储,加法,减法等,但是每个特定ISA都有许多其他分外类型的指令。对付每种类型的指令,掌握单元将知道须要将哪些旗子暗记路由到何处。
例如,当您在Windows上运行.exe时,该程序的代码将移入内存,并且见告CPU第一条指令的起始地址。CPU始终掩护一个内部寄存器,该寄存器保存要实行的下一条指令的存储器位置。这称为程序计数器(PC)。
一旦知道从哪里开始,指令周期的第一步便是获取该指令。这会将指令从存储器移到CPU的指令寄存器中,这称为提取阶段。实际上,指令可能已经在CPU的高速缓存中,这个我们在后续再先容。
指令周期-解码
当CPU有一条指令时,它须要专门弄清楚它是什么类型的指令。这称为解码阶段。每个指令将具有一组称为操作码的特定位,该“位”见告CPU如何阐明它。这类似于如何利用不同的文件扩展名见告打算机如何阐明文件。例如,.jpg和.png都是图像文件,但是它们以不同的办法组织数据,因此打算机须要知道类型才能精确阐明它们。
根据ISA的繁芜程度,CPU的指令解码部分可能会变得繁芜。像RISC-V这样的ISA可能只有几十条指令,而x86有数千条指令。在范例的Intel x86 CPU上,解码过程是最具寻衅性的过程之一,并且占用大量空间。CPU将解码的最常见的指令类型是存储器,算术或分支指令。
3种紧张指令类型
存储指令可能类似于“将值从存储地址1234读入值A”或“将值B写入存储地址5678”。算术指令可能类似于“将值A添加到值B并将结果存储到值C”。分支指令可能类似于“如果C值为正,则实行此代码;如果C值为负,则实行彼代码”。一个范例的程序可能将它们链接在一起,以产生类似“将结果为肯定的内存地址1234的值添加到内存地址5678的值,并将其存储在内存地址4321的结果,如果结果为负的则存储在地址8765的东西” 。
在开始实行刚刚解码的指令之前,我们须要停息少焉以谈论寄存器。
CPU具有一些很小但非常快的存储器,称为寄存器。在64位CPU上,每个将容纳64位,并且内核可能只有几十个。这些用于存储当前正在利用的值,可以将其视为类似于L0缓存的值。在上面的指令示例中,值A,B和C都将存储在寄存器中。
ALU
现在回到实行阶段。对付我们上面谈论的3种类型的指令,这将有所不同,因此我们将分别先容每一种。
从算术指令开始,由于它们最随意马虎理解。这些类型的指令被送入算术日志单元(ALU)进行处理。ALU是一种常日具有两个输入和掌握旗子暗记并输出结果的电路。
想象一下您在中学期间利用的基本打算器。要实行操作,请输入两个输入数字以及要实行的操作类型。打算器进行打算并输出结果。对付我们的CPU的ALU,操作类型由指令的操作码决定,掌握单元会将其发送给ALU。除了基本的算术运算之外,ALU还可以实行AND,OR,NOT和XOR之类的bitwise运算。ALU还将为掌握单元输出一些有关其刚刚完成的打算的状态信息。这可能包括诸如结果是肯定的,否定的,零的还是溢出的事情。
ALU与算术运算最干系,但是它也可以用于存储器或分支指令。例如,CPU可能须要打算作为先前算术运算结果给出的内存地址。它还可能须要打算偏移量,以添加到分支指令所需的程序计数器中。诸如“如果先前的结果是否定的,则向前跳20条指令”。
内存指令和层次构造
对付内存指令,我们须要理解一个称为“ 内存层次构造”的观点。这代表了高速缓存,RAM和主存储之间的关系。当CPU吸收到一条内存指令,该指令针对尚未在其寄存器本地存储的数据时,它将沿内存层次构造低落,直到找到它为止。大多数当代CPU包含三级缓存:L1,L2和L3。CPU首先要检讨的地方是L1缓存。这是三级缓存中最小和最快的。L1高速缓存常日分为用于数据的部分和用于指令的部分。请记住,指令须要像数据一样从内存中获取。
范例的L1缓存可能为数百KB。如果CPU在L1缓存中找不到所需的内容,它将检讨L2缓存。这可能约为几MB。下一步是L3缓存,它可能是几十MB。如果CPU在三级缓存中找不到所需的数据,它将进入RAM,最后进入主存储器。当我们沿着每一步走时,可用空间大约增加一个数量级,但是等待韶光也增加。
CPU找到数据后,它将调出层次构造,以便将来如有须要,CPU可以快速访问它。这里有很多步骤,但是可以确保CPU快速访问所需的数据。例如,CPU可以在一个或两个周期内读取其内部寄存器,在几个周期中读取L1,在十个旁边周期中读取L2,在几十个周期中读取L3。如果须要进入内存或主存储,则可能要花费数万乃至数百万个周期。根据系统的不同,每个核心可能会拥有自己的私有L1缓存,与另一个核心共享一个L2,并在四个或更多核心的组之间共享一个L3。我们将在本文后面详细谈论多核CPU。
分支和跳转指令
三种紧张指令类型中的末了一种是分支指令。当代程序始终无休止地跳来跳去,CPU很少实行没有分支的连续指令。分支指令来自诸如if语句,for循环和return语句之类的编程元素。这些都用于中断程序实行并切换到代码的不同部分。也有跳转指令,这些跳转指令是始终采取的分支指令。
条件分支对付CPU尤其棘手,由于它可能一次实行多个指令,并且可能直到分支开始实行后续指令后才能确定分支的结果。
为了完备理解为什么这是一个问题,我们须要进行另一种转移,并谈论流水线。指令周期中的每个步骤可能须要几个周期才能完成。这意味着在提取指令时,ALU否则将处于空闲状态。为了最大化CPU的效率,我们在称为流水线的过程中划分每个阶段。
理解这一点的经典方法因此洗衣服为比拟。您有两个东西要洗,洗涤和干燥个须要一个小时。您可以将第一个物件放入洗衣机中,然后在烘干机中放入,等烘干之后后再开始洗第二个产品。这将花费四个小时。但是,如果您划分事情并在第一个产品干燥的同时开始第二个洗涤,则可以在三个小时内完成两个装载。一小时减少量取决于您的要洗的东西数量以及洗衣机和烘干机的数量。洗烘每个东西仍旧须要两个小时,但是如果打算重叠,则将总吞吐量从0.5个产品/小时增加到0.75个产品/小时。
CPU利用相同的方法来提高指令吞吐量。当代的ARM或x86 CPU可能具有20多个流水线级,这意味着在任何给定点,该内核一次都可以处理20多个不同的指令。每种设计都是唯一的,但是一个样本划分可能是4个周期用于读取,6个周期用于解码,3个周期用于实行以及7个周期将结果更新回内存。
回到分支机构,希望您可以开始看到此问题。如果直到周期10才知道一条指令是分支,那么我们将已经开始实行9条新指令,如果采取该分支,这些指令可能无效。为理解决这个问题,CPU具有非常繁芜的构造,称为分支预测器。他们利用机器学习中的类似观点来考试测验预测是否将采取分支。分支预测变量的繁芜性远远超出了本文的范围,但是在基本级别上,它们跟踪先前分支的状态,以理解是否可能采取即将到来的分支。当代分支预测器可以具有95%或更高的准确性。
一旦确定分支的结果(已完成流水线的该阶段),程序计数器将被更新,CPU将连续实行下一条指令。如果分支的预测缺点,则CPU将在分支缺点地开始实行后抛出所有指令,然后从精确的位置重新启动。
乱序实行
现在,我们知道如何实行三种最常见的指令类型,让我们看一下CPU的一些更高等的功能。实际上,所有当代处理器实际上并没有按吸收顺序实行指令。等待实行其他指令时,可以利用称为乱序实行的范例来最大程度地减少停机韶光。
如果CPU知道即将到来的指令,但所需的数据并不能及时准备,这时候它可以在等待时切换指令顺序并从程序的后面引入一条独立的指令。该指令重新排序是一种功能非常强大的工具,但它远非CPU利用的唯一技巧。
另一个提高性能的功能称为预取。如果您要花韶光从头到尾完成一条随机指令须要多永劫光,您会创造内存访问大部分韶光都用完了。预取器是CPU中的一个单元,它试图预见将来的指令以及它们将须要什么数据。如果创造须要CPU尚未缓存的数据,它将到达RAM并将该数据提取到缓存中。因此它的名称叫做预取。
加速器与未来
在CPU中,另一个正在增加的紧张功能是对付特界说务的加速。这些电路的全部事情是尽可能快地完成一项小任务。这可能包括加密,媒体编码或机器学习。
CPU可以自己完成这些事情,但是拥有专用于它们的单元会大大提高效率。专用GPU便是一个很好的例子。CPU当然可以实行图形处理所需的打算,但是为它们配备专用单元可以供应更好的性能数量级。随着加速器的兴起,CPU的实际核心可能只占芯片的一小部分。
下图显示了几年前的Intel CPU。大部分空间被内核和缓存占用。下面的第二张图片是新的AMD芯片。那里的大部分空间都由核心以外的组件占用。
走向多核
末了要先容的紧张功能是如何将一堆单独的CPU连接在一起以形成多核CPU。这不但是大略地放入我们之前谈论的单核设计的多个副本那样大略。就像没有大略的方法将单线程程序转换为多线程程序一样,相同的观点也适用于硬件。问题来自核心之间的依赖性。
例如,对付4核设计,CPU须要能够以4倍的速率发出指令。它还须要四个单独的内存接口。由于多个实体可能会处理相同的数据,因此必须办理诸如同等性和非同等性之类的问题。如果两个内核都利用相同的数据来处理指令,那么他们如何知道谁拥有精确的代价?如果一个内核修正了数据但又没有及时到达另一个内核实行该怎么办?由于它们具有可存储重叠数据的单独缓存,因此必须利用繁芜的算法和掌握器来肃清这些冲突。
随着CPU中内核数量的增加,精确的分支预测也非常主要。内核一次实行的指令越多,个中一个处理分支指令的可能性就越高。这意味着指令流可能随时变动。
常日,单独的内核将处理来自不同线程的指令流。这有助于减少内核之间的依赖性。这便是为什么如果您检讨“任务管理器”,您会常常看到一个核心在努力事情,而其他核心却在事情。许多程序不是为多线程设计的。在某些情形下,让一个核心来完成事情比支付试图分工的开销要高得多。
物理设计
本文的大部分内容都集中在CPU的体系构造设计上,由于这是大多数繁芜性所在。但是,所有这些都须要在现实天下中创建,这又增加了另一层次的繁芜性。
为了使全体处理器中的所有组件同步,利用了时钟旗子暗记。当代处理器常日在3.0GHz和5.0GHz之间运行,并且在过去十年中彷佛没有改变。在每个周期中,芯片内部数十亿个晶体管处于导通和截止状态。
时钟对付确保在流水线的每个阶段提高时,所有值在精确的韶光显示都是至关主要的。时钟确定CPU每秒可以处理多少条指令。通过超频提高其频率将使芯片速率更快,但也会增加功耗和热量输出。
热量是CPU的最大仇敌。随着数字电子设备的升温,微不雅观晶体管可能开始退化。如果不用除热量,可能会导致芯片破坏。这便是为什么所有CPU都带有散热器的缘故原由。CPU的实际硅芯片可能仅占物理设备表面积的20%。占用空间的增加许可热量更均匀地散布到散热器。它还许可更多的引脚用于与外部组件的接口。
当代CPU的背面可以有数千个或更多的输入和输出引脚。由于大多数打算部件都在芯片内,因此移动芯片可能只有几百个引脚。不管采取哪种设计,个中约有一半专门用于供电,别的用于数据通信。这包括与RAM,芯片组,存储,PCIe设备等的通信。
随着高性能CPU在满负载下汲取100安培或更高的电流,它们须要数百个引脚才能均匀分散电流花费。引脚常日镀金以提高导电性。不同的制造商在其许多产品线中利用不同的销钉支配。
结合一个例子
总结一下,我们将快速先容一下Intel Core 2 CPU的设计。这是从2006年开始的,因此某些零件可能已过期,但是尚无有关较新设计的详细信息。
从顶部开始,我们有指令缓存和ITLB。转换后备缓冲区(TLB)用于帮助CPU知道存储器中要查找所需指令的位置。这些指令存储在L1指令缓存中,然后发送到预解码器中。x86体系构造极其繁芜且密集,因此有许多解码步骤。同时,分支预测器和预取器都在期待由传入指令引起的任何潜在问题。
从那里,指令被发送到指令行列步队。回顾一下无序设计如何使CPU实行指令并选择最及时的指令来实行。该行列步队保存CPU正在考虑确当前指令。一旦CPU知道哪一条指令将是最佳实行办法,它将进一步解码为微操作。虽然一条指令可能包含CPU的繁芜任务,但微操作是风雅的任务,CPU可以更轻松地对其进行阐明。
然后,这些指令进入“注册表”,“ ROB”和“保留站”。这三个组成部分的确切功能有些繁芜(请考虑研究生水平的大学课程),但是它们在乱序过程中用于帮助管理指令之间的依赖关系。
一个“核心”实际年夜将具有许多ALU和内存端口。将传入的操作放入预留站,直到可以利用ALU或内存端口。一旦所需的组件可用,该指令将在L1数据缓存的帮助下进行处理。输出结果将被存储,并且CPU现在准备从下一条指令开始。便是这样!
虽然本文并不是要确切地辅导每个CPU的事情办法,但是它该当使您对它们的内部事情事理和繁芜性有一个很好的理解。坦白说,AMD和Intel之外的人实际上都不知道他们的CPU如何事情。本文的每个部分都代表了全体研究和开拓领域,因此此处供应的信息只是从头开始。
点击文末阅读原文,可阅读英文原文。
免责声明:本文由作者原创。文章内容系作者个人不雅观点,半导体行业不雅观察转载仅为了传达一种不同的不雅观点,不代表半导体行业不雅观察对该不雅观点赞许或支持,如果有任何异议,欢迎联系半导体行业不雅观察。
本日是《半导体行业不雅观察》为您分享的第2278期内容,欢迎关注。
★疫情下的半导体众生相
★本土低功耗蓝牙芯片发展提速
★芯片“备胎”操持
NAND Flash|华为|CMOS|蓝牙|FPGA|晶圆|苹果|射频|日本