CPU 中有多个内核一次用于 运行 多个 threads/processes,还是用于指令级并行?

Is having multiple cores in a CPU for running multiple threads/processes at once, or for instruction-level parallelism?

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

我试图了解是否拥有多个内核只是为了在给定的 CPU 中启用指令级并行性,或者 CPU 中的多个内核是否都有自己的结构 rq让它们独立地调用 __schedule() 并随意调度 processes/threads,然后指令级并行性由每个内核 内的其他模块 处理。

任何想法表示赞赏。

ILP 完全独立于每个物理内核中。
跨站点重复:How does a single thread run on multiple cores?
(它不是——每个核心都有多个执行单元和一个宽前端。 阅读我的链接答案以了解我不会重复的详细信息。另见 现代微处理器 90 分钟指南!)

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


在某些情况下,“CPU”是单核的同义词。例如perf stat 输出说“7.5 CPUs utilized”。

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

也许这就是造成术语混淆的原因?

what the difference is between multiple cores and multiple CPUs

多个内核在一块硅片上,多个CPU在不同的硅片上。这几乎是多核和多 CPUs 之间的唯一区别。

如今,“核心”一词通常更为准确——它与 CPU 的原始定义含义相同:冯·诺依曼架构模型的中央处理器。然而,随着时间的推移,术语 CPU 已被(滥用)营销人员用来表示单个硅片或单个物理封装中的所有东西,即使它不止一个 CPU/core .

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