半导体行业观察@这篇说得最详细,关于CPU科普( 三 )


理解这一点的经典方法是以洗衣服为对比 。 您有两个东西要洗 , 洗涤和干燥个需要一个小时 。 您可以将第一个物件放入洗衣机中 , 然后在烘干机中放入 , 等烘干之后后再开始洗第二个产品 。 这将花费四个小时 。 但是 , 如果您划分工作并在第一个产品干燥的同时开始第二个洗涤 , 则可以在三个小时内完成两个装载 。 一小时减少量取决于您的要洗的东西数量以及洗衣机和烘干机的数量 。 洗烘每个东西仍然需要两个小时 , 但是如果计算重叠 , 则将总吞吐量从0.5个产品/小时增加到0.75个产品/小时 。
半导体行业观察@这篇说得最详细,关于CPU科普
文章图片
CPU使用相同的方法来提高指令吞吐量 。 现代的ARM或x86CPU可能具有20多个流水线级 , 这意味着在任何给定点 , 该内核一次都可以处理20多个不同的指令 。 每种设计都是唯一的 , 但是一个样本划分可能是4个周期用于读取 , 6个周期用于解码 , 3个周期用于执行以及7个周期将结果更新回内存 。
回到分支机构 , 希望您可以开始看到此问题 。 如果直到周期10才知道一条指令是分支 , 那么我们将已经开始执行9条新指令 , 如果采用该分支 , 这些指令可能无效 。 为了解决这个问题 , CPU具有非常复杂的结构 , 称为分支预测器 。 他们使用机器学习中的类似概念来尝试猜测是否将采用分支 。 分支预测变量的复杂性远远超出了本文的范围 , 但是在基本级别上 , 它们跟踪先前分支的状态 , 以了解是否可能采用即将到来的分支 。 现代分支预测器可以具有95%或更高的准确性 。
一旦确定分支的结果(已完成流水线的该阶段) , 程序计数器将被更新 , CPU将继续执行下一条指令 。 如果分支的预测错误 , 则CPU将在分支错误地开始执行后抛出所有指令 , 然后从正确的位置重新启动 。
乱序执行
现在 , 我们知道如何执行三种最常见的指令类型 , 让我们看一下CPU的一些更高级的功能 。 实际上 , 所有现代处理器实际上并没有按接收顺序执行指令 。 等待执行其他指令时 , 可以使用称为乱序执行的范例来最大程度地减少停机时间 。
如果CPU知道即将到来的指令 , 但所需的数据并不能及时准备 , 这时候它可以在等待时切换指令顺序并从程序的后面引入一条独立的指令 。 该指令重新排序是一种功能非常强大的工具 , 但它远非CPU使用的唯一技巧 。
半导体行业观察@这篇说得最详细,关于CPU科普
文章图片
另一个提高性能的功能称为预取 。 如果您要花时间从头到尾完成一条随机指令需要多长时间 , 您会发现内存访问大部分时间都用完了 。 预取器是CPU中的一个单元 , 它试图预见将来的指令以及它们将需要什么数据 。 如果发现需要CPU尚未缓存的数据 , 它将到达RAM并将该数据提取到缓存中 。 因此它的名称叫做预取 。
加速器与未来
在CPU中 , 另一个正在增加的主要功能是对于特定任务的加速 。 这些电路的全部工作是尽可能快地完成一项小任务 。 这可能包括加密 , 媒体编码或机器学习 。
CPU可以自己完成这些事情 , 但是拥有专用于它们的单元会大大提高效率 。 专用GPU就是一个很好的例子 。 CPU当然可以执行图形处理所需的计算 , 但是为它们配备专用单元可以提供更好的性能数量级 。 随着加速器的兴起 , CPU的实际核心可能只占芯片的一小部分 。
下图显示了几年前的IntelCPU 。 大部分空间被内核和缓存占用 。 下面的第二张图片是新的AMD芯片 。 那里的大部分空间都由核心以外的组件占用 。
半导体行业观察@这篇说得最详细,关于CPU科普
文章图片
半导体行业观察@这篇说得最详细,关于CPU科普
文章图片