[转帖]电脑硬件入门——基础之CPU架构解读

电脑硬件,入门,基础,cpu,架构,解读 · 浏览次数 : 0

小编点评

**CPU的结构和功能** CPU是计算机的执行单元,负责执行指令。CPU由多个寄存器、运算单元和调度器组成。 *寄存器:用于存储指令的临时数据。 *运算单元:负责执行指令的计算。 *调度器:负责执行指令的调度。 **指令的融合** 指令可以被融合,合并成一个更复杂的指令。例如,A=B可以被合并成 A = B + 1。 **分支预测** 分支预测,是将多个分支预测到一个单分支指令中。例如,A 或 B 可以合并成 A if B。 **寄存器文件的分配** 寄存器文件用于分配不同的寄存器。例如,多个运算单元可以共享一个寄存器。 **CPU的调度** 调度器负责执行指令的调度。当指令到达CPU时,调度器会选择最合适的运算单元执行该指令。 **CPU的类型** CPU有两种类型:整数和浮点数。整数类型用于存储整数数据,例如0、1、2、3、4、5。浮点数类型用于存储浮点数数据,例如1.05、2.3、3.4、5.6。 **CPU的优化** CPU可以通过优化来提高执行效率。例如,使用寄存器存储指令,减少分支预测的计算。

正文

https://zhuanlan.zhihu.com/p/65840506

 

前言

上一篇文章我们从整体上介绍了电脑的各个部件以及功能,CPU可以说是整台电脑中最核心的部件。这篇文章里面,给大家介绍一下CPU里面都有什么。

 

我们家里用的电脑,CPU只有两家厂商在生产:Intel和AMD。每家厂商都提供很多型号的CPU,这篇文章以Intel生产的,主流市场上的旗舰型号:Core i9-9900K为例子来介绍。

 

1、9900K整体架构

还是先看图[1]

9900K整体架构图

9900K大概可以分为5个部分:

  1. CPU核心:图中红框部分为一个核心,9900K一共有8个核心。早期的CPU其实就只有这么一个东西,但现在的CPU逐步发展,把一些周边的部件也集成在同一块半导体晶片上,因此传统的CPU就变成了现代CPU上的核心。此外,为了提高CPU的计算能力,单块CPU中的核心数量越来越多,就消费级市场来说,从2005第一款双核心CPU奔腾D发布到今天的单块CPU晶片有8个核心的i9-9900K。
  2. 三级缓存(Level 3 Cache,简写为L3、L3$、L3C、L3 Cache):图中中间8个粉色块组成的三级缓存,用于临时存放内存中的一小部分数据。这里分成8小块,对应8个CPU核心。有时候L3也叫末级缓存(Last Level Cache,LLC),当然,对9900K这样具有三级缓存的CPU,L3才等同于LLC。有的老式CPU有的只有二级缓存,LLC就是L2;某些服务器使用的CPU有四级缓存,LLC则是指L4。
  3. 核心显卡:图中左边紫框部分,这个以后的文章中我们再介绍。
  4. 系统代理:图中右边绿色部分,这是负责连接CPU与其它部件的多个模块的集合。从上到下分别是:
    1. 显示控制器:负责核心显卡输出;
    2. PCI-e控制器:负责CPU与外部IO设备连接,以后的文章我们会另外介绍;
    3. eDRAM控制器:这个其实9900K是没有的,某些定制型号会集成有特殊的内存,称为嵌入式动态随机访问存储(Embedded Dynamic Random-Access Memory, eDRAM)。一般来说eDRAM是作为核心显卡的专用显存使用,这个控制器就是负责从eDRAM读写数据的。
    4. 内存控制器:负责CPU与内存连接,从内存中读写数据。
  5. 环形总线(RingBus):把上面这些模块连接起来的,上图中标记着Ring的蓝色圈。

 

2、核心架构图

这张图看起来很复杂是不是?不用担心,我们一个一个说。当然,我们这是入门知识,不会介绍的太细。

 

我们上一篇文章提到,现代CPU都是改进型哈弗架构;并且举了一个会计做财务报告的例子。这里我们继续使用这个例子来介绍。但之前,我们稍微改一下做财务报告的方式,不是一个人全部做完,我们是一个团队。有的同事根据制作指南列计算步骤,有的同事根据计算步骤在小纸条上列公式,有的同事负责从账本上把数据抄到写好公式的小纸条上,有的同事对着小纸条用计算器算数并且算完了写回小纸条上,有的同事把小纸条上的数抄到最终的财务报表上。CPU里面,小纸条有一个专门的名称,叫寄存器(Register)。

 

2.1 缓存子系统(Memory Subsystem)

一家规模比较大点的企业,完整的账本很厚。我们做整年的财务报告,通常只需要每个科目的汇总数就可以了,为了方便,我们把每个科目汇总的那几页复印出来放在一起。

完整的财务报告制作指南也很厚,但一个企业可能只有其中很少一部业务。例如一家软件公司,就不涉及原材料进货、仓库存储之类的业务;很多公司也没有贷款、投资之类的业务。所以我们也只把跟公司有相关业务的部分复印出来。

同样的,内存中的数据很多,CPU只需要把计算用到的指令、数据放到缓存中——也就是图中的紫色块的缓存子系统。

 

2.2 前端(Front End)

CPU的前端其实就是我们上篇文章中的控制单元,负责对指令进行预处理。指令预处理大体上分为取指、预解码、融合、解码、分支预测、重排等操作。

 

取指(Fetch)

我们制作财务报表,第一步就是把制作指南拿出来。CPU也一样,先把指令载入进来。

 

预解码(PreDecode)

制作指南是一整页的,我们要分解出第一步算哪个数据,第二步又是算哪个数据,在小纸条上把公式列出来,一张小纸条一个公式。CPU也一样,要把程序中一整批的指令数据,拆分出来第一条是什么指令,第二条是什么指令;可能还需要对指令进行分类标志。预解码后的指令放在指令队列(Instruction Queue)里面。

 

解码(Decode),又称为译码

小纸条上的公式写着:利润=收入-支出,查帐本的同事就需要先把收入和支出数据从账本中找出来,抄到小纸条上。同样的,CPU碰到类似把内存中两个数加起来这样的指令,需要分解成:

  1. 从内存载入第一个数字;
  2. 从内存载入第二个数字;
  3. 两个数字相加

这样三个指令。一般来说,我们把原始的指令称为宏操作(Macro-Operations),分解后的指令称为微操作(Micro-Operations, μops)。

 

指令融合(Micro-Fusion/Macro-Fusion)

假设指南中有一个数据是算平均数的,某个按计算器的同事手上整好有一个可以直接算平均数的统计用计算器。那么,当我们在指南中看到一条类似 (�1+�2+�3+...+��)÷� 这样的公式的时候,我们可以直接列算这几个数的平均数公式,注明给这位同事算。CPU也一样,某些指令是可以融合起来执行的,例如:

  1. 比较A和B的大小;
  2. 如果A不等于B,跳转到标志X的指令。

可以用一条指令JNE A,B,X来代替,这样的处理称之为指令融合。指令解码前的宏操作融合,称为Macro-Fusion,解码后的微操作融合,称为Micro-Fusion。

 

分支预测(Branch Prediction)

理论上,制作指南中列出的所有步骤,我们都要完成上面的这些处理。但假设制作指南中说,盈利的话要算某几个数据,亏损的话这几个数不用算,要另外算其它几个数据。当我们计算过第一季度的数据知道企业第一季度是盈利的,我们算第二季度的数据时,想偷懒就直接跳过亏损要算的那几个数据的处理了。CPU处理指令也是一样的,负责预测的模块叫分支预测器(Branch Predictor)

当然,如果算下来我们发现第二季度亏损了,还是要重新处理指南上的这些计算步骤。CPU也一样。

 

指令重排,或者叫乱序执行(Out-Of-Order,OOO),或者动态执行(Dynamic Execution)

事实上,我们不一定要完全按照指南上的步骤第一步算什么,第二步算什么这样算。只要公式列出来,数据抄出来了,就可以直接交给按计算器的同事去算。所以可能第一步要用的数据不太好找,按计算器的同事就先把第二步算出来了。

当然,这里有一个前提,就是算第二步的时候,不需要用到第一步的计算结果。

 

2.3 执行单元(Execution Engine)

执行单元也就是上一篇文章提到的运算单元了。也就是我们这个团队里抄数据、按计算器的各位同事了。其中,按计算器的同事中,有的用的计算器简单点,只能做四则计算,还只能算整数;有的用高级点的计算器,可以算小数;有的用统计专用的计算器;有的用更高级的可以算很多函数的计算器。当然,有这么多不同的计算器,什么样的小纸条给哪位同事用,我们也需要有一个人来做分配小纸条这件事情。

 

数据存取单元(Load Data/Store Data)

CPU里面也一样,有负责从缓存子系统中载入数据的Load Data单元;有把计算结果写回去缓存子系统的Store Data单元。

 

计算单元

CPU里面负责具体计算的,根据计算类型、计算的数据不同,有多种计算单元:

  1. 整数算术逻辑单元(Integer Arithmetic Logic Unit,Int ALU),算整数加减法/二进制运算;需要说明一下的,电脑里面很多小数计算也是通过移位操作处理后,用整数单元计算后再数小数位这样的方式来处理的。
  2. 整数乘法器(Integer Multiplier,Int MUL),专门负责整数乘法的;
  3. 整数除法器(Integer Divider,Int DIV),专门负责整数除法的;
  4. 分支处理(Branch),负责各种跳转指令的;
  5. 地址生成器(Address Generation Unit,AGU),这个稍微解释一下,例如制作指南中说,总收入要和上一年度的总收入对比算增长率,那么就需要翻译成“现在做2018年的年报,上一年度就是2017年度总收入”。CPU也是一样,有的指令是把内存地址A1的数和A1后面第五个地址的数相加,那么要先算出来A1后面五个地址A2到底是哪个地址。
  6. 整数向量ALU(Int Vect ALU),向量是指类似空间坐标+值(x,y,z, value)这样的一组数据,其中x、y、z和value都是整数。类似整数,除了算加减法/二进制的整数向量ALU,还有整数向量乘法器、除法器(Int Vect MUL,Int Vect DIV)。
  7. 浮点向量加乘融合单元(Fused multiply–add,FP FMA),这个也要解释一下。我们知道,105可以写成 1.05×102 这样的形式,这种形式在计算机中称为浮点数。上面提到向量中,如果(x,y,z,value)中的一个或者多个都是浮点,就是浮点向量。而加乘融合,是指 �+�×� 这样的计算,当然,可以算加乘融合的,自然也可以用来算加减法和乘法:A=0就是乘法,C=1就是加减法。
  8. 浮点除法单元(FP DIV):算浮点除法的,也可以算一些常用函数例如开方、对数等。
  9. 其它:例如加密用的AES,字符串处理的Vect String,位查找的bit Scan(对一个二进制数据按照多种方法数0)

 

调度器(Scheduler)

有这么多不同的计算单元,CPU需要一个把不同的计算指令分配给对应计算单元的调度器。

不过呢,我们这个财务部比较特殊,分了几个小办公室,某几个同事在一个办公室里面,另外几个同事又在另一个办公室里面,而每次我们只能传一张小纸条到一个办公室。

在9900K里面,从图中可以看到,不同的计算单元在不同的端口(Port)下,就是类似的情况。

 

寄存器文件(Register File)

计算财务数据的时候,很多数据的计算是需要多步计算的,具体到每一步的计算,可能要分给不同的同事来算。如果每一步列一张小纸条,等某位同事算完第一个数,再抄到第二张小纸条给另外一位同事,这显然很慢很麻烦——直接列在一张小纸条上就好了嘛。

另外,我们有这么多同事,分配小纸条的同事每次传小纸条可以一次分配好多张——当然,前提是分给不同的同事。

因为可能一张纸条要算好几次,又有这么多纸条传来传去,因此为了不出错,我们需要标明这张小纸条给谁算,算完了,负责分配小纸条的同事根据下一步要算的,把标注的名字改一下给另外一位同事去算。

 

CPU中的寄存器也一样,一个数据可能需要不同的计算单元多次处理,又有那么多的计算单元分成了好几组。所以我们需要多个寄存器,这些寄存器的组合称之为寄存器文件。每个计算单元只能处理特定名称的寄存器里面的数据,因此调度器经常需要对寄存器进行分配、重命名、退出等操作。


  • 更细节的电脑知识,我会在后续的文章中介绍,请保持关注。
  • 如果你觉得这篇文章对你有帮助,请点赞支持让更多人看到。
  • 如果看完觉得有问题的话,请评论留言指正。

与[转帖]电脑硬件入门——基础之CPU架构解读相似的内容:

[转帖]电脑硬件入门——基础之CPU架构解读

https://zhuanlan.zhihu.com/p/65840506 前言 上一篇文章我们从整体上介绍了电脑的各个部件以及功能,CPU可以说是整台电脑中最核心的部件。这篇文章里面,给大家介绍一下CPU里面都有什么。 我们家里用的电脑,CPU只有两家厂商在生产:Intel和AMD。每家厂商都提供

[转帖]电脑硬件入门——基础之计算机架构

https://zhuanlan.zhihu.com/p/63322067 谈电脑硬件的文章很多,但一般是从电脑有哪些配件说起。这篇文章我尝试从架构方面来阐述,希望更有助于萌新对电脑的各种配件的作用进行理解吧。 1、冯·诺依曼架构[1] 现代计算机,常见的有两种架构,其中一种是冯·诺依曼架构。先看图

[转帖]从零开始学nginx

1. nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。 nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。 第

[转帖]Jmeter性能测试:高并发分布式性能测试

一、为什么要进行分布式性能测试 当进行高并发性能测试的时候,受限于Jmeter工具本身和电脑硬件的原因,无法满足我们对大并发性能测试的要求。基于这种场景下,我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 二、分布式性能测试原理 要进行分布式性能测试,我们首先要先一台机器作为主控机(Con

[转帖]一代更比一代强!一文带你回顾DDR内存的前世今生

根据冯诺·依曼结构,计算机中要有存储器。所以直到今天,内存和硬盘仍然在电脑中占有非常重要的地位。与大容量的硬盘不同,内存在存取速度上有着非常惊人的表现,但是断电后又不能保存存入的信息。因此在电脑硬件长期的发展过程中,内存一直扮演着中转站的角色。和其他硬件一样,内存遵循着摩根定律,从最远古的SIMM到

[转帖]电脑技巧:磁盘空间分析工具SpaceSniffer介绍

https://zhuanlan.zhihu.com/p/568310893 今天继续给大家分享一款磁盘空间分析工具SpaceSniffer,有需要下载地址可以私信小编获取。 1、简介 SpaceSniffer是由Uderzo公司研发的一款磁盘空间分析软件,安装包体积也只有2.3MB。 功能:主要是

[转帖]电脑小白必读的CPU基础知识大全,CPU知识科普最新全面讲解

http://www.lotpc.com/yjzs/9374.html 对于电脑来说,CPU是最核心的硬件之一,相当于人体的大脑,它决定着一台电脑的运算速度,无论是台式机还是笔记本,CPU的选购至关重要。相信大家对CPU还不是很了解,下面装机之家分享一下CPU知识科普最新全面讲解,想要学习CPU知识

[转帖]40年前电脑、芯片、光刻机,美国第一,中国第二

https://www.mzfxw.com/e/action/ShowInfo.php?classid=12&id=111592 如果讲毛主席时代中国在电脑、芯片等技术产品很厉害,年轻人绝不会相信,说这不可能。 可这是事实,老徐(微信公众号:手抄报)就找到这些资料,有图有真相。 两个年轻人不记得的人

[转帖]MESI协议:如何让多核CPU的高速缓存保持一致

你平时用的电脑,应该都是多核的 CPU。多核 CPU 有很多好处,其中最重要的一个就是,它使得我们在不能提升 CPU 的主频之后,找到了另一种提升 CPU 吞吐率的办法。 不知道上一讲的内容你还记得多少?上一节,我们讲到,多核 CPU 里的每一个 CPU 核,都有独立的属于自己的 L1 Cache

[转帖]win10多网卡指定ip走某个网卡的方案

https://zhuanlan.zhihu.com/p/571614314 我的电脑上有两个网卡,一个网卡A(网线),一个是网卡B(WIFI)。 需求:网卡A和网卡B是不同的网络,网卡A已经把3389端口屏蔽了,网卡B能访问3389端口。 我们需要使用网卡B访问特定3389端口的IP地址,网卡A访