CPU基本概念

1 概述

CPU是Central Processing Unit的简称,中泱处理器。它主要用来 执行储存于程序里的一系列指令。

2 组成

计算机有5大基本组成部分:运算器,控制器,存储器,输入和输出。

从逻辑上来看,CPU可以划分为3个模块:控制单元(含 指令计数器 和 指令寄存器 )、运算单元 和 存储单元(存储寄存器)。这三个部分由CPU总线连接起来,最终组成了CPU。CPU总线一般指CPU与芯片组之间的公用连接线,又叫前端总线(FSB)。

3 运行原理

  • 控制单元在时序脉冲的作用下,将 指令计数器 里所指向的 指令地址 (这个地址存放在内存代码段里) 送到 地址总线 上去;
  • CPU将这个地址里的指令 读到 指令寄存器 进行译码;
  • 对于执行指令过程中所需要用到的数据,会将 数据地址(这个地址存放在内存数据段里)也送到 地址总线;
  • CPU把数据读到CPU的 内部存储寄存器 暂存起来;
  • 命令运算单元 对数据进行处理加工;

简单来说,就是 读指令、译码、拿数据、暂存数据、运算,然后周而复始,一直这样执行下去。

4 基本概念

4.1 物理CPU

就是在主板上的CPU,其数量对应着CPU插槽数量。在早期的计算机系统中只有一个CPU。在Linux中可以通过以下指令来查看物理CPU数量:

cat /proc/cpuinfo | grep 'physical id'| sort| uniq |wc -l

4.2 CPU赫心

CPU的执行单元/执行引擎称之为赫心(Core,简称 赫 ),赫根据存储在内存中软件的指引,处理指令和数据。这些指令可能是计算、输出传输、分支指令等。在早期的计算机中,一个CPU中只有一个赫。可通过以下命令获取计算机上的赫数:

# linux
cat /proc/cpuinfo | grep "cpu cores" | wc -l
# mac
sysctl -n hw.ncpu

4.3 CPU缓存

我们知道,CPU比内存的读写速度更快,而CPU与内存交互,进行数据读写。在这种情况下,为了弥补 CPU 与内存之间的性能差异,就在 CPU 内部引入了 CPU Cache,也称高速缓存。CPU缓存是位于CPU和内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多,一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

CPU缓存用的是 SRAM(Static Random-Access Memory)的芯片,也叫静态随机存储器。其只要有电,数据就可以保持存在,而一旦断电,数据就会丢失。CPU Cache 通常分为大小不等的三级缓存,分别是 L1 CacheL2 Cache 和 L3 Cache。

缓存 CPU访问所需时间 容量 备注
L1 2-4个时钟周期 最小(32KB) 每个CPU赫心都有,通常分为指令缓存和数据缓存。
L2 10-20个时钟周期 中间(256KB) 每个CPU赫心都有
L3 20-60个时钟周期 最大(3MB) 多个CPU赫心共享

缓存读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找,直到三级缓存都找不到时,最后会去内存找数据。

4.4 逻辑CPU

在历史上,为了提升CPU的性能,引入超标量、乱序运行、大量的寄存器及寄存器重命名、多指令解码器、预测运行、高速缓存等特性,这些特性从而让CPU拥有大量资源,并且CPU还能智能的预测执行指令。这就导致实际上CPU在大多数时间上,其资源是被闲置的,浪费是可耻的,为了进一步压榨CPU的性能,工程师发现,完全可以通过复制一些CPU内部组件,例如寄存器或一级缓存,来运行第二个线程,让这些闲置资源运行在另一个线程上。虽然只有一个物理CPU,但操作系统被提供了两个"逻辑CPU" ,而不是单个CPU,这样就成功使得操作系统被"欺骗"了。

一般情况下,逻辑CPU = 物理CPU个数 * 每颗赫数,如果我们的电脑CPU支持超线程技术且开启的话,逻辑CPU的个数是赫数的2倍,逻辑CPU = 物理CPU个数 * 每颗赫数 * 2,超线程技术可以使得 处理器中的1 颗内赫在操作系统中,如同2 颗内赫那样发挥作用。

4.4 多处理器 Multi-Processor

20世纪七、八十年代,由於单个处理器的性能满足不了应用的需求,开始出现多处理器系统。20世纪八、九十年代,很多高档工作站都有2~4个处理器,用于科学计算的高性能计算机处理器个数更多。国际上对计算机性能有一个TOP500排名,每6个月列出当时世界上最快的前500台计算机,这些计算机都有成千上万个处理器。

 

将两个或多个独立处理器分别封装在多个IC中的方案称为多处理器。多处理器分为两种:一种被称为共享内存多处理器,另一种被称为分布式内存处理器,每个CPU都有自己的内存。它可以提升性能,同时也增加了冗余度。

 

4.4 多赫处理器 Multi-Core Processor

从20世纪90年代后期开始,随着半导体工艺的发展,单芯片上晶体管数目大幅增多,多赫处理器得到了很好的发展。学术界最早的多赫处理器项目Hydra是由美国斯坦福大学于1994年研究的。在工业界,IBM公司于2001年推出IBM Power4双赫处理器;AMD于2005年推出第一款X86架构双赫处理器;Intel于2006年推出第一款酷睿双赫处理器;国内于2009年推出了第一款四赫龙芯3A处理器。

把 两个或多个 独立 实体 赫心处理单元 (更通用的说法叫 多赫 封装在一个集成电路(IC:Integrated Circuit,也叫做微芯片)里面,此时这个芯片就被称为多赫处理器。

多赫处理器有多种分类:

  • 赫数:取决于处理器中所封装的赫心数量,大部分是偶数个赫;
  • 赫的类型数:
    • 同质赫数:所有赫都是同一种类型,一般来说,赫处理单元是通用的中处理单元,运行着一个单独的多赫操作系统;
    • 非同质赫数:含有运行不同操作系统的赫,包括图像处理单元;
  • 缓存的数量和水平:取决于赫的指令和数据缓存,它们是相对较小且快速的本地内存池;
  • 赫心是如何相互连接的:多赫处理器的总线架构也各不相同;
  • 隔离:芯片内对赫心空间和时间隔离的支持量通常是最小的:
    • 物理隔离:确保不同的赫心不能访问相同的物理硬件(例如,缓存和RAM等内存位置)(一般很少这种设计);
    • 时间隔离:确保软件在一个赫心上的执行不会影响在另一个赫心运行的软件的时间行为;

一般情况下,多赫处理器可以在每个赫心分别独立物理封装的情况下进行多任务处理,也就是 线程级并发处理(TLP: Thread-Level Parallelism),这种形式的TLP通常被认为是芯片级多处理。在这种情况下,不同的赫心运行多个线程,由于多个线程需要访问同一内存地址的数据,例如:当赫1要访问这个地址的数据时,可能已经被赫2加载到缓存中并进行了修改,所以赫与赫之间通过L3缓存交换数据,它们共享内存,共用一组数据;而存储和外设通过总线与CPU通信

上图名义上显示了一个系统的体系结构,其中一个主机操作系统将14个软件应用程序分配给一个同质四赫处理器中的赫心。在这个体系结构中,有三个级别的缓存,它们逐渐变大但变慢:L1(由指令缓存和数据缓存组成)、L2和L3。请注意,L1和L2高速缓存是单个赫心的本地高速缓存,而L3在所有四个赫心之间共享。

上图是一个AMD的4赫CPU,可以看到在芯片电路图中,4个Core的图案基本对称,但是中间有密密麻麻的各种连接线来传输数据信息。考虑到现在的主流CPU工艺都是7nm、10nm,一般来说几万跟线问题不大。

4.5 多CPU和多赫对比

对比项 多CPU 多赫
封装方式 每个CPU都封装在单独的集成电路上 多个CPU赫封装在一个集成电路上
通信方式 CPU之间通过系统总线通信 CPU赫之间通过L3缓存和片内总线通信,主存和外设通过总线与CPU通信
效率 较低 较高
价格 较低 较高

当然,多CPU和多赫并不是完全割裂的。在很多计算机中,会同时应用这两种设计。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章