核心与处理器之间的差异


Answers:


196

内核通常是CPU的基本计算单元-它可以运行单个程序上下文(如果支持硬件线程(例如Intel CPU上的超线程),则可以运行多个程序上下文),维护正确的程序状态,寄存器和正确的执行顺序,以及通过ALU执行操作。出于优化目的,内核还可以保存具有常用内存块副本的内核缓存。

一个CPU可能具有一个或多个内核以在给定的时间执行任务。这些任务通常是操作系统计划的软件过程和线程。请注意,操作系统可能要运行许多线程,但是CPU在给定的时间只能运行X个此类任务,其中X =内核数*每个内核的硬件线程数。其余的将不得不等待操作系统调度它们,无论是抢占当前正在运行的任务还是任何其他方式。

除了一个或多个内核之外,CPU还将包括一些将内核与外界连接的互连,通常还包括大型的“最后一级”共享缓存。要使CPU工作,还需要多个其他关键元素,但是它们的确切位置可能会因设计而异。您将需要一个内存控制器来与内存,I / O控制器(显示器,PCIe,USB等)进行通信。过去,这些元素位于CPU外部,位于互补的“芯片组”中,但是大多数现代设计已将它们集成到CPU中。

此外,CPU可能具有集成的GPU,并且设计师出于性能,功耗和制造方面的考虑,几乎希望保持所有其他功能。CPU设计主要趋向于所谓的片上系统(SoC)。

这是一种“经典”设计,被大多数现代通用设备(客户端PC,服务器以及平板电脑和智能手机)使用。您通常可以在学院中找到更精细的设计,而这些计算不是以基本的“类核心”单元完成的。


@Leeor因此对于4 cpu和2核心机器,如果我运行繁忙的循环,它是否应该仅使用1个cpu和1个核心(即50%)的cpu?我的观察结果显示,它使所有CPU参与了100%的工作……这是我理解中缺少的东西
Nrj 18'Aug

2
@Nrj,如果您运行一个单线程应用程序,它将被分配给一个核心,并仅在其上激活一个硬件线程。该线程将能够利用该内核的100%,因为没有其他线程与之一起运行。如果激活另一个应用程序,则通常会将其分配给另一个内核,依此类推,直到饱和内核数量为止。除此之外,还将使用SMT将任何其他线程再次调度到相同的内核。届时,核心利用率将在2个线程之间分配(如果它们表现对称,则每个线程可能会达到
〜50

@Leeor显然这是我的期望,但不是我发现的。我看到所有四个CPU(在taskmanager中)都跳起来以显示100%的使用率。代码很简单-for(int i = 0; i <Integer.MAX_VALUE; i ++){System.out.println(k); }
Nrj '18

@Leeor我想我做错了测试。它看起来像我的在线工作区具有虚拟CPU(4)但只有一个处理器。那就是为什么所有人都变得忙碌。当我在2 cpu物理机(双核)上执行测试时,我可以看到cpu利用率约为25%,与预期相符。
Nrj

请注意,该术语会有所不同,具体取决于您问谁。例如,在我的Debian系统上,进行检查时,尽管显示,但/proc/cpuinfo我看到了16 processor:model: AMD Ryzen 7 2700X Eight-Core Processor。因此,至少在这种情况下,8个“核心”中的每一个都有两个“处理器”,这与此处的其他答案不一致。
jwd

130

一个图像可能说出一千多个单词:

图像可能说出一千多个字

*该图描述了现代多处理器,多核系统的复杂性。

资源:

https://software.intel.com/zh-CN/articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utilization


114
对于像蚂蚁这样的小动物来说,它可能会说出一千多个单词。
天空

12
我没有反对使用图像的任何内容,但是至少您可以作进一步的解释,而不仅仅是复制/粘贴图像。
Patricio Sard 2016年

1
@Sky要小心蚂蚁... #hunter_x_hunter:3
Saad Achemlal

对于那些说它很小而无法阅读的人,请尝试右键单击它,Open images in new tab然后使用cltr++
Ng Sek Long

28

首先,让我们澄清一下什么是CPU,什么是核心,一个中央处理单元CPU,可以有多个核心单元,这些核心本身就是一个处理器,能够执行程序,但自身包含在同一芯片上。

过去,一个CPU分布在相当多的芯片中,但是随着摩尔定律的发展,它们使一个完整的CPU集成在一个芯片(芯片)中,因为90年代制造商开始在同一个芯片中安装更多的内核,所以多核的概念。

如今,在同一CPU(芯片或裸片)GPU(英特尔至强)上可能有数百个内核。上世纪90年代开发的另一种技术是同步多线程,基本上,他们发现在同一个单核CPU中可以有另一个线程,因为大多数资源已经被复制,例如ALU,多个寄存器。

因此,基本上一个CPU可以有多个内核,每个内核可以同时运行一个或多个线程,我们可能希望将来拥有更多的内核,但是要有效编程则会有更多困难。


甚至“ Intel E5-2697 v2 ”也只有12个内核...为什么说“同一CPU上有数百个内核”?什么限制了单个CPU上可能的内核数量?
Pacerier '16

2
他们在+100内核的数量研究微处理器和生产几看一看到:tomshardware.com/forum/318101-28-which-maximum-cores-cores
赫尔曼·阿尔法罗

9

CPU是中央处理单元。从2002年开始,我们只有一个核心处理器,也就是说,我们一次只能执行一个任务或一个程序。

为了一次运行多个程序,我们必须使用多个处理器来一次执行多个进程,因此我们需要另一块主板,这非常昂贵。

因此,英特尔引入了超线程的概念,即它将单CPU转换为两个虚拟CPU,即我们有两个用于执行任务的内核。现在,CPU是单CPU,但它只是假装(伪装)它具有双CPU并执行多个任务。但是拥有真正的多核会更好,因此人们开发制造多核处理器,即在一个盒子上安装多个处理器,即在一个大CPU上安装多个CPU。即多核。


12
2002年到底发生了什么?
Peter Mortensen

1
英特尔并未发明同步多线程的概念。 维基百科说Alpha EV8是第一个主要的商业实现
彼得·科德斯

3

在早期...像90年代之前...处理器无法有效地执行多个任务...因为单个处理器只能处理单个任务...所以当我们以前说我的防病毒软件,Microsoft Word,VLC等 所有软件都同时运行...实际上并非如此。当我说一个处理器一次可以处理一个进程时……我是说真的。它实际上会处理一个任务...然后用于暂停该任务...执行另一个任务...如果任务短暂完成,则将其完成,或者再次将其暂停并添加到队列中,然后再执行下一个任务。但是我提到的“暂停”非常小(大约1ns),以至于您不了解任务已暂停。例如。在vlc上,一边听音乐,一边同时运行其他应用程序,但正如我告诉您的那样...一次只运行一个程序...

但这是关于旧处理器的...

当今的处理器(即第三代PC)具有多核处理器。现在,“核心”可以与第一代或第二代处理器本身进行比较……嵌入到单个芯片,单个处理器中。因此,现在我们了解了什么是核心,即它们是组合在一起成为处理器的微型处理器。而且每个内核可以一次处理一个进程,也可以为操作系统设计多个线程。他们遵循与我上面提到的有关单个处理器的相同步骤。

例如。一个i7 6gen处理器具有8个核心...即1个i7中有8个迷你处理器...即,其速度是旧处理器的8倍。这就是可以完成多任务处理的方式。

例如,单个处理器中可能有数百个内核。英特尔i128。

我希望我能很好地解释这一点。


0

如Tortuga的最佳答案所示,英特尔的图片很有帮助。这是它的标题。

处理器:大约1950年代至2010年代,一个半导体芯片,即CPU(中央处理器)安装在一个插槽中。随着时间的流逝,更多的功能被打包到CPU芯片上。在1950年代发布单芯片处理器之前,一个处理器可能已经分布在多个芯片上。在2010年代中期,片上系统芯片使将一个处理器等同于一个芯片变得更加粗略,尽管这通常是人们所说的处理器的意思,例如“此计算机具有i7处理器”或“此计算机系统”有四个处理器。”

核心:CPU的一块,一次执行一条指令。(您会看到人们在每个时钟周期说一条指令,但是有些CPU对某些指令使用多个时钟周期。)


1
x86内核在逻辑上按程序顺序一次执行一条指令,但实际上,现代CPU花费大量晶体管来保存这样做的错觉,而实际上却是4宽超标量无序执行。realworldtech.com/haswell-cpu。(对于Ryzen,则为5或6宽)。对于某些代码,每个时钟多于3条指令在实践中并不罕见。但是在其他代码中,缓存丢失和/或分支错误预测的瓶颈也远远低于1。
彼得·科德斯

而且,像Itanium这样的VLIW体系结构是显式并行的,并且在逻辑上和物理上并行执行多个指令。顺便说一句,有趣的历史观点是,一个CPU在早期占用了多个芯片。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.