为了账号安全,请及时绑定邮箱和手机立即绑定

一窥CPU的世界

本文不代表当前、过去或未来任何雇主的观点。文中的观点纯属个人看法。

我们接下来要讨论的是CPU亲和性,但在那之前,稍微花点时间了解一下CPU本身也是有意义的。

你可能已经听过“CPU是计算机的大脑”这句话。这确实是一个很好的类比。大脑接收输入,从记忆和感官(比如视觉和听觉)中获取信息,通过神经网络中的神经元处理输入,然后输出新的记忆或协调的肌肉运动(就像我现在正在打这篇文章一样)。同样,CPU从RAM内存或外部设备接收输入(如键盘),通过一系列由电气电路实现的“CPU指令”来处理输入,并将输出写入内存或发送命令给外部设备(比如在我的屏幕上显示字符)。当然,人类大脑的生理结构与计算机硬件设计有很大不同,但有趣的是,许多人工智能/机器学习都在模仿大脑的工作方式,例如使用神经网络

类似于神经科学中对大脑的研究,与CPU相关的术语同样复杂多变且充满歧义——例如,“任务”和“线程”可能含糊不清,甚至“CPU”这个术语也可能存在歧义。诚然,这些术语仍然让我感到困惑不已,但我今天会尽力理清这些术语 :-)。那么,让我们来聊聊CPU吧!

什么是CPU呢?

课本里是这么说的:中央处理单元,简称 CPU,是计算机的主要处理器,负责执行计算机程序中的指令。中央处理器 是一个电子组件(集成电路),通常会对来自外部的数据源(如内存或其他数据流)进行处理。

CPU的电路中内置了一套基本操作,称为“指令集”。这些操作包括例如进行两个数字的加减运算,比较两个数字,将数据存储到内存或从内存中读取,或者跳转到程序的其他部分。每个指令都由一组特定的位表示,称为机器码。

CPU主要由一种叫做硅的材料制成。是地壳中的常见元素,并且是一种半导体。这意味着,根据添加的不同材料,它可以在电压作用下导电。硅在制造[晶体管]中起关键作用,晶体管是一种控制电流或电压的设备(基本上晶体管是电子开关)。反过来,晶体管是构成CPU的基本单元。

CPU 是从一片称为 CPU 晶圆硅晶圆 的高纯度硅薄片制造出来的。在制造过程中,晶体管和布线图案直接被制造在其表面。一片晶圆上包含着许多 CPU 晶粒,这些晶粒从晶圆上切下来后,每个晶粒都会被连接到一个 CPU 封装中。这个封装随后可以直接安装到主板上的CPU插槽中。CPU 中的晶体管很小,目前的技术可以使它们小到 5 纳米,这相当于每平方毫米可以容纳 1.25 亿到 3 亿个晶体管。一个单独的 CPU 可以拥有超过 1000 亿个晶体管(苹果的 M2 Ultra 芯片拥有记录中的1340亿个晶体管)。

X99–8D4/2.5G 双路双 CPU 主板,配有 2 颗 Intel Xeon E5–2696 处理器。左边是一张拥有两个 CPU 插槽的主板图片,右边是两个可以装到主板上的 Intel 至强处理器包装盒。每个 Intel 至强处理器包含十八个核心,因此整个系统共有三十六个核心总计。

CPU晶片。左上图显示的是硅锭,即高度纯化的硅柱。CPU晶片是由硅锭切片制成的。右上图展示的是用于英特尔至强处理器的CPU晶片,每个“方块”是单个CPU芯片(经我计算大约有八十多个)。右下图放大展示了CPU晶片上的芯片。

CPU核心数:

一个 CPU 可以包含一个或多个核心,每个 CPU 核心 是 CPU 内的一个独立处理单元。这里有一点点模糊的地方,因为我们说一个处理单元包含多个处理单元!一种思考方式是,通常 CPU 指的是插到主板插槽中的封装,而 核心 指的是封装内的处理器单元。如果有多个核心,我们称其为 多核,这就有了诸如 双核四核N CPU 的说法,其中 N 是某个数字。多核允许并行处理,这能带来非常大的性能提升。CPU 核心主要包括执行单元、控制单元和内存。

执行单位

执行单元是由[逻辑门]组成的电路,用来执行指令的逻辑运算。主要的整数运算执行单元是ALU算术逻辑单元)。通常也会有一个FPU(浮点运算单元)用于进行浮点运算。

控制模块

控制单元(CU)负责管理数据和发送信号给硬件,执行指令处理。这包括包含解码指令的逻辑、调度CPU流水线操作、处理指令的乱序执行以及进行分支预测操作(见下文)。

记忆:

存储器 包含了直接用于 CPU 指令的操作数的寄存器。正如我们之前讨论的,寄存器位于内存层次结构金字塔的顶端。它们由 双稳态触发器 构成,这是速度最快但也是最昂贵的内存类型。一个核心的寄存器集合称为寄存器文件(register file)。各种执行单元通常有自己的寄存器文件。通常称算术逻辑单元(ALU)的寄存器为“整数寄存器”(或简称“寄存器”)。浮点单元(FPU)通常有一组“浮点寄存器”(floating point registers)。

每个核心都有一个L1缓存,也可能拥有一个L2缓存。一个负载-存储单元(LSU,即负载-存储单元)通常称为LSU,是一个专门处理负载和存储指令的执行单元,负责执行所有负载和存储指令,生成所有负载和存储操作的虚拟地址,并从寄存器加载数据或将数据存储回内存。

Intel Rocket Lake-E CPU。这是 Rocket Lake-E CPU 的芯片注释图。该 CPU 拥有八个核心,每个核心配备有自己的 2MB L3 缓存。

英特尔塞浦路斯湾CPU核心。这显示了英特尔Rocket Lake-E CPU(上图所示)中塞浦路斯湾核心的注释图像。请注意,“$”代表“缓存”,即有48KB的L1 D$(数据缓存),32KB的L1 I$(指令缓存),以及512KB的L2缓存。执行单元位于左上角——其中FPU是浮点运算单元,SIMD是单指令多数据处理单元。位于中部的是加载-存储单元和缓冲区,底部则是控制单元的各个部分。

执行指令

CPU的核心主要功能是执行程序的指令。这种架构被称为冯·诺伊曼架构,由Jon von Neumann在1945年构思。冯·诺伊曼架构的特点是,指令是按顺序执行的,每个指令的执行可以分为多个阶段;这是必要的,由于获取指令和数据必须在不同的阶段分别完成,因为它们共享同一根内存总线。

大多数现代CPU采用的是冯·诺伊曼架构的变体。其阶段数量根据复杂性和性能需求有所不同,在现代计算机中,这个范围一般在5到20个阶段之间。最经典的例子是RISC的五级管线。这五个阶段是:

  1. 取指令:从内存中获取下一条指令
  2. 解码指令和寄存器读取:解码指令的操作码并获取输入寄存器中的值
  3. 执行指令:执行指令
  4. 内存访问操作:访问内存中的数据(要么是加载要么是存储)
  5. 回写寄存器:将结果值写回到寄存器中

每个步骤由处理器的基本逻辑模块——逻辑门单独控制,这些逻辑门由“CPU指令执行周期时钟”驱动。这指的是CPU内部时钟的单次脉冲,该脉冲指示从指令获取、解码到执行过程中的一个步骤的完成。例如,这指的是一步骤的完成,如从获取、解码到执行过程中的一个步骤。换句话说,每个时钟周期实际上代表整个指令执行周期中的一个阶段,而时钟的速度直接影响到CPU处理指令的速度。时钟速度(或频率)以赫兹(Hz)为单位表示,在当今计算机中,通常范围在1GHz到3GHz。

指令管线

指令流水线技术 是一种常见的实现单个 CPU 内核中的指令级并行性的技术。通过将传入的指令分解为一系列由不同处理器单元执行的阶段(即所谓的“流水线”),流水线试图让处理器的每个部分都在处理不同的指令,从而使不同指令的部分能够并行处理。

五级CPU流水线的各个阶段。这展示了流水线中五个指令的执行过程。五个指令在九个周期内完成执行。每一行代表一个阶段,每一列表示一个周期。

按指令的五级流水线标准结构。这展示了与上图相同的流水线,但用另一种视角表示,每一行代表一个指令。这两种表示方式都很常见。各阶段标记为 IF(取指)、ID(译码)、EX(执行)、MEM(访存)和 WB(寄存器回写)。

当一切运行得非常顺利,所有阶段都保持忙碌时,每周期指令数为 1.0。我们说每周期指令数,或简称 IPC,为 1.0。如果我们想知道 CPU 每秒执行了多少指令,只需将 IPC 乘以时钟频率即可。例如,如果某个 CPU 的 IPC 是 1.0,时钟频率是 2GHz,那么每秒可以执行 20亿条指令。

当然,在现实生活中,不是所有事情都会顺利进行。这种情况的典型例子就是缓存未命中的情况。这会导致流水线阻塞,直到内存操作完成,流水线才会继续。发生缓存未命中的指令及其后续指令可能都会被延迟,直到缓存未命中被解决。流水线阻塞会降低IPC,可能低于1.0,从而使性能下降。下图展示了流水线阻塞的影响。

流水线停滞。这显示了与前一个示例中的五段流水线相同的五个指令,只是指令B是一个需要从缓存中加载但未命中的内存加载指令。发生了八周期流水线停滞,使得这五个指令总共需要十七个周期才能完成。

CPU性能表现

1971年,英特尔推出了第一个CPU,英特尔4004,而在1978年推出的英特尔8086则成为了第一代个人电脑的基础。此后,事情真正开始加速发展。实际上,在1965年,戈登·摩尔提出了后来被称为摩尔定律的理论。摩尔定律表明,每经过1到2年,芯片上的晶体管数量就会翻一番。这意味着,CPU以及整体计算机的性能每两年大约会翻一番。摩尔定律已经持续了超过五十年,虽然有些人认为它已经失效了,最终它不可避免地会结束,因为[量子不确定性]对晶体管的最小尺寸设定了一个限制。

微芯片引入的年份与其晶体管数量。注意,y轴(晶体管数量)采用对数刻度。此图的数据来源请参考此处

根据摩尔定律的一个推论,CPU 的时钟频率每两年翻一番。这确实做到了,然而当时钟频率达到大约 3GHz 时,光速开始成为瓶颈,热量问题也变得显著。如图所示,我们大约在 2002 年左右遇到了时钟频率的极限,此后,行业转向制造多核 CPU 以维持性能增长。

绘制CPU时钟频率和核心数量随时间的变化。需要注意的是,在2002年,时钟频率达到了约3GHz的顶点,此时多核CPU开始进入市场。

CPU优化技术

CPU供应商们使用了许多技巧和优化来提高性能。这涉及到一些非常复杂的工程技术,但好消息是,这些优化从根本上说都基于我们已经概述的原则。我会提到几个具体的优化。

分支预测

通过预测程序在代码中的分支走向,从而减少处理开销,提升性能。

乱序执行

允许 CPU 以更高效的方式,而不是按原始顺序执行指令。

Intel的超线程

在每个物理核心上创建多个逻辑核心以使得能够并行执行多个线程。

缓存层级

使用不同级别的缓存(L1、L2 和 L3)来存储经常被访问的数据,以便更快地访问。

特定指令

指令集架构(ISA)(关于微架构和指令集架构的详细信息,可以参见此链接:https://www.geeksforgeeks.org/microarchitecture-and-instruction-set-architecture/)可以加入执行复杂的、特定领域的操作的指令。其中包括

  • 浮点运算 指令在浮点运算单元(FPU)中执行浮点运算。
  • 向量指令SIMD(单指令多数据)指令高效地执行向量和矩阵运算。
  • Intel AES 指令和 RISC-V 加密 指令用于加密和解密操作。
超标量架构

超标量核心或[超标量处理器]中,一些指令阶段被复制以提高指令级并行性。与只能在一个时钟周期内执行一条指令的标量处理器相比,超标量处理器可以通过同时将多条指令分配到处理器的不同执行单元来执行多条指令或启动多条指令的执行。采用超标量架构,每时钟周期的指令数(IPC)可以超过1.0,从而提高性能。

超标量流水线。在此示例中,五级流水线的各个单元被复制,使得每次可以同时发出两条指令。这增加了并行性,从而缩短了执行所需的时间。在这个例子中,超标量处理方式将完成五个指令A到E所需的时间从九个周期缩短到了七个周期。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
手记
粉丝
32
获赞与收藏
170

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消