CPU 中有多个内核是为了同时运行多个线程/进程,还是为了指令级并行?

问题描述

我只是想更清楚地了解多核的确切用途,以及多核和多 cpu间的区别。

我试图了解拥有多个内核是否只是为了在给定的 cpu 内启用指令级并行性,或者一个 cpu 内的多个内核是否都有自己的 struct rq 允许它们独立调用 __schedule() 和调度进程/threads ,然后指令级并行由每个内核的附加模块处理。

任何想法表示赞赏。

解决方法

ILP 纯粹位于每个物理内核中。
跨站重复:How does a single thread run on multiple cores?
(它没有 - 每个内核都有多个执行单元和一个广泛的前端。 阅读我链接的答案以了解我不会重复的详细信息。另见Modern Microprocessors A 90-Minute Guide!)

此外,真正的 CPU 内核可以伪装成多个“逻辑内核”(即每个内核都有寄存器上下文并且可以独立调用 __schedule())。通常,这是SMT;该概念最广为人知的品牌实现是英特尔的超线程。让多个软件线程真正同时共享一个 CPU(而不是通过软件上下文切换)为核心提供了两个指令流以在内部和内部找到并行性,通常会增加整体吞吐量(以某种程度的单线程性能为代价,取决于工作负载的单个线程可以保持核心的繁忙程度)。


在某些情况下,“CPU”是单核的同义词。例如perf stat 输出显示“使用了 7.5 个 CPU”。

但更多时候,CPU 指的是整个物理包,例如我的 CPU 是四核 i7-6700k。服务器主板通常是双插槽的,允许您插入两个独立的多核 CPU。

也许这就是造成一些术语混乱的原因?

,

多核和多CPU有什么区别

多核位于一块硅片上,而多颗 CPU 位于不同的硅片上。这几乎是多核和多 CPU 之间的唯一区别。

现在,“核心”一词通常更精确——它与 CPU 的原始定义含义相同:冯诺依曼架构模型的中央处理单元。然而,随着时间的推移,CPU 一词已被营销部门 (ab) 用来表示单个硅片或单个物理封装中的所有东西,即使数量超过一个 CPU/内核。

在谈论软件时,事情变得更加不精确,因为您可能在单个物理 CPU 上运行多个“逻辑”或“虚拟”CPU。这里的术语核心通常仍然更精确,指的是物理设备,但在处理虚拟机时,您可能会看到对“虚拟核心”的引用。