CPU的Core和Uncore? P Core E core ?

2024-02-05 22:12
文章标签 core cpu uncore

本文主要是介绍CPU的Core和Uncore? P Core E core ?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

x86架构的历史

x86 CPU 架构

Core

P Core / E core

总结

结语


书接上文:CISC&RISC? CPU架构有哪些? x86 & ARM?-CSDN博客

前面咱们聊到了计算机的 CISC和RISC,也大致了解了市面上主流的一些CPU架构。

今天咱们就继续讲讲目前PC和服务器领域的老大哥——Intel的x86架构,看看x86 CPU里面到底有什么!

x86架构的历史

首先,先简单了解下Intel x86架构CPU的历史,大致理一下其发展脉络,可以帮助我们更好地理解x86架构。

x86 architecture is a computer processor architecture that was originally introduced by Intel in 1978 and became the dominant architecture in the PC market. Today, the x86 architecture is widely used in computing devices such as desktops, laptops,workstations and servers. 

x86架构作为一种计算机处理器架构,最早是由Intel 于1978年提出,后来成为个人电脑(Personal Computer, PC)领域的主流架构。目前,x86架构被广泛应用于桌面、笔记本、平板、工作站和服务器等领域。

我们最初熟悉的x86 处理器,相信不少本科是自动化的同学在课堂上都学过,笔者当时的课程是:《单片机原理与设计》,其中就主要介绍的是8086/8088系列单片机

下面列出一张笔者总结的x86架构脉络发展图,只是个大概,不是很详细,但基本能说明意思。

x86架构的发展呢,大致经历了以下几个阶段:

  • 8086/8088阶段,16位模式,采取了代码分段机制(写汇编代码时的代码段、数据段等等)。
  • 80286阶段,引入了保护模式。
  • 80386阶段,正式进入32位模式,引入虚拟8086模式和分页机制。
  • 80486阶段,引入并行执行,8KB L1级缓存和 x87浮点算是单元FPU。
  • Pentium阶段:引入Netburst微架构,流水线、16KB L1缓存,和分支预测机制。
  • Xeon阶段: 64位模式,引入多核设计,超线程技术、虚拟化技术
  • Core 阶段: 我们熟悉的i3,i5,i7,i9,Nehalem 微架构,低功耗设计,集成内存控制器IMC,Turbo Boot技术
  • Ultra阶段:目前,Intel正式推出Ultra系列,采用4nm制程,采用CPU + GPU + NPU的异构计算模式,以支持本地AI算力部署。

注意,上述Pentium、Xeon、Core 系列的时间线是有交叉的,并非严格按照时间线的先后顺序,图中只是列出来标志性时间点,方便理解。

具体发展脉络可参考Intel的官方文档:64-ia-32-architectures-software-developer-vol-1-manual.pdf

x86 CPU 架构

了解了X86架构的大致发展脉络,那 x86 CPU里面的架构具体是什么样子呢?

本文以 Intel 的志强系列 (Xeon) 为例来进行介绍。Xeon系列处理器的特点是多核,其广泛应用于工作站服务器领域。

目前,Intel Xeon 系列已经发展到第五代了,其采用DDR5内存,支持PCIe 5.0和 CXL技术,可以提供强大的计算能力和快速的内存访问,为目前异常火爆的AI,高性能计算HPC,数据中心提供了有力支持。

关于Xeon的详细内容,读者可以参考Intel官网:第五代英特尔® 至强® 处理器 – 英特尔 (intel.cn)

好,那我们继续讲CPU。

通常来说,我们的CPU可以被划分为两部分: Core Uncore。根据字面意思,可以简单理解为:核心部分和非核心部分。

下图是笔者根据网上资料总结的CPU内部Core和Uncore的划分图,里面有些部件可能已经弃用,但不妨碍咱们理解Core和Uncore的设计理念。

那接下来,咱就围绕着这张图进行详细讲解。

首先 SOCKET 通常指的是主板(Mother Board)上的CPU插槽,通常PC上只有一个,服务器上可能会有多个。由于SOCKET和处理器基本一一对应。所以,可以直接用SOCKET代指处理器,即CPU。

早期一个CPU里面通常只有一个核,即一个计算单元。但随着对计算性能要求的提升,现代CPU里面大多采用多核实现,即一个物理CPU里面集成了了多个计算单元电路。一个计算单元电路也就是一个核,即我们所说的Core。

除了Core以外,其余部分就是Uncore部分啦。

Core

那Core里面又包含什么东西?Core扮演着至关重要的角色,是计算机系统的核心,主要负责计算和控制功能。

所以,一般来说,Core包含以下部件:

  • 控制单元 EU (Control Unit) 负责控制,协调各单元,完成计算功能。
  • ALU(Arithemetic Logical Unit) 算数逻辑单元和FPU(Float Point Unit)浮点算数单元,主要负责计算。
  • L1(FLC,First Level Cache)和L2(MLC, Middle Level Cache) 缓存,主要负责存储ALU和FPU经常使用的代码或数据,提升计算效率。
  • Registers: 寄存器,主要保存计算结果或中间临时变量。
  • Clock\Bus\...: 时钟,总线,为其它部件提供时钟信号和信息传输通路。

这里也可以参考下早期 8086/8088 CPU的内部架构图,加深理解 Core 部分。

还是不能理解?

那必须祭出此图了!下图是 Intel Xeon E5 系列的CPU内部结构图。

可以看到,其中包含Core0, Core1, 除开这些,其余部分便是Uncore啦,主要包括:

  • CBox : Cache Box,可以理解为LLC和Core通信的信道。
  • LLC : Last Level Cache,最后一级Cache,也叫做L3 Cache。
  • HA : Home Agent,负责Cache和memory一致性等。
  • IMC : Integrated Memory Controller,集成内存控制器。
  • Pbox : Physical layer ,我理解为链接物理层的信道,比如SMI,PCIe,QPI等等。
  • QPI :Quick Path Interconnect,高速信号通路,目前已经被UPI (Ultra Path Interconnect)取代。
  • Ubox : System Config Controller,和PCU打交道。
  • PCU: Power Control Unit,电源控制电路。
  • IIO: Intergrated Input Output,集成输入输出模块。
  • PCIe: Peripheral component interconnect express, 一种高速数据接口总线,目前主板上的大多数设备都挂接在PCIe总线下,包括显卡,内存,硬盘等等。
  • DMI : Direct Media Interface, 连接CPU和PCH的物理链路。

可见,Uncore部分包含很多,而且每款CPU的Uncore具体包含哪些部件还不一样。

那,有的读者可能要问了,上图中那个橘黄色的圆环是什么?感觉像是信息通路?

其实,差不多就是那个意思。准确来说,这是Intel为实现多核通信而设计的一种Ring Bus,也叫环形总线

本文并不打算对环形总线进行详细展开,感兴趣的读者可以参考下面的链接,该文章出自笔者关注的一位知乎大佬博主,里面有详细的介绍。

友情链接:破茧化蝶,从Ring Bus到Mesh网络,CPU片内总线的进化之路 - 知乎 (zhihu.com)

其实,目前,最近几代 Intel Xeon系列早已不采用Ring Bus总线结构,因为随着CPU核心数的增加,Ring Bus 逐渐显示出它的局限性,即多核之间的通信延时越来越长

为了解决这个问题,Intel设计了Mesh Bus,如下图所示,这里不再深入介绍,可参考上面的友链。

好,看到这里,相信读者对CPU的Core和Uncore设计应该有了大致的了解。

那咱们再继续深入一下吧。

P Core / E core

不知道,大家有听说过大小核吗,或者 P Core 和 E Core 呢?

Intel在酷睿12/13代推出了大小核的设计,其中:

  • ”大核“也就是”P Core“ ,即 Performance Core,性能核。
  • ”小核“也就是 ”E Core“, 即 Efficiency Core,效率核。

大核主打性能,睿频高;小核主打低功耗,睿频小

当系统开启超线程(Hyper-Thread)技术后,一个大核可以等效为两个小核,更准确地说,是等效为两个逻辑核(Logical core)。

在操作系统看来,每一个逻辑核就是一个物理核。

比如笔者的电脑是:4个P Core + 8个 E Core,那总的物理核心数 = 4 + 8 = 12个,而逻辑核心数 = 4 * 2 + 8 = 16 个。

读者不妨看看你们的电脑的核心数是多少呢?是否支持大小核呢?

总结

好啦,本文的分享到这里就基本结束啦。简单总结一下,本文主要对以下三方面进行了介绍:

  • x86架构CPU的发展脉络
  • CPU的Core和Uncore架构
  • CPU的大小核机制

后面,笔者也会针对Uncore的部分组件,如Cache等进行专门的介绍,欢迎大家及时查看~

结语

好,相信通过本文的分享,大家应该对CPU有了更深的了解了吧。以后当同事问你知不知道CPU的Core和Uncore,大小核时,你应该不至于一脸懵逼了吧哈哈。

最后呢,给大家留一个小问题:你知道如何关闭电脑的小核吗?Win10有大小核调度机制吗?Win11呢?

如果大家觉得本文有帮助话,还请点个赞以及关注我的 【CPU】专栏哦,你的鼓励是笔者不懈创作的动力~,蟹蟹~

这篇关于CPU的Core和Uncore? P Core E core ?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682314

相关文章

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

Java程序到CPU上执行 的步骤

相信很多的小伙伴在最初学习编程的时候会容易产生一个疑惑❓,那就是编写的Java代码究竟是怎么一步一步到CPU上去执行的呢?CPU又是如何执行的呢?今天跟随小编的脚步去化解开这个疑惑❓。 在学习这个过程之前,我们需要先讲解一些与本内容相关的知识点 指令 指令是指导CPU运行的命令,主要由操作码+被操作数组成。 其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提:已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“+”号导入很慢,所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好,默认下载的tensorflow

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

jupyter在加载pkl文件时报错ModuleNotFoundError: No module named 'pandas.core.internals.managers'; '的解决方法

笔者当看到这个错误的时候一脸懵逼,在pycharm上正常运行的code 放在jupyter就不成了,于是就研究一翻。 一开始以为自己的pkl文件有问题,研究重点放在这里,最后发现不是。 然后取搜索pycharm和jupyter下的python的\Lib\site-packages\pandas\core\internals有什么不同 发现jupyter下没有pandas\core\intern

CPU亲和性设置 代码示例 sched_setaffinity sched_getaffinity

视频教程在这: cpu亲和性设置,NCCL,sched_setaffinity sched_getaffinity,CPU_ZERO、SET、ISSET、linux_哔哩哔哩_bilibili 一、CPU亲和性简介 CPU亲和性(CPU Affinity)设置是操作系统中一个重要的性能优化手段,它允许程序或进程被绑定到特定的CPU核心上运行。这样做的好处包括减少缓存未命中、降低线程迁移(co

ubuntu16.04 caffe(github源码cpu)+python3.5+opencv3.4.5安装编译

https://www.cnblogs.com/hanjianjian90/p/10604926.html