【发布时间】:2019-08-27 22:09:15
【问题描述】:
lscpu 的输出给出(包括部分输出):
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 1
Core(s) per socket: 6
Socket(s): 2
NUMA node(s): 2
我只是想确认一下我的理解是正确的:
(1) 我有 12 个 CPU/内核。这个数字也是我拥有的硬件线程数。
(2) 如果 (1) 为真,例如,我运行的代码使用了超过 12 个 SOFTWARE 线程,这将导致超额订阅。假设我使用 13 个软件线程,这是否意味着我的 1 个软件线程不能与其他 12 个软件线程同时运行?
【问题讨论】:
-
是的。当您有 12 个可用内核时使用 13 个线程将保证并非所有内核都可以同时运行。他们怎么可能?如果所有内核都在使用,额外的线程会在什么情况下同时运行?
-
不,每个核心 2 个线程不会为您提供 24 个 CPU。您仍然有 12 个 CPU,每个 CPU 运行 2 个线程。在 CPU 上运行两个线程不会神奇地导致 CPU 数量成倍增加。它为您提供在 12 个内核上运行的 24 个线程,其中每个内核在其正在执行的线程之间进行上下文切换。它仍然是一个核心。我目前的机器上有 12 个内核,根据 Windows 任务管理器,这 12 个内核正在执行 3156 个线程,但我仍然只有 12 个内核。
-
那篇文章指的是特定的东西。来自帖子:CPU 是您在运行 htop 时看到的 (这些不等同于物理 CPU)。 我不知道您在编写 时是什么意思硬件线程;线程通常在软件中实现并在硬件(CPU 内核)上执行。我的笔记本电脑中有一个 Xeon 处理器,每个内核有 6 个物理内核 x 2 个逻辑处理器,这意味着我的机器上实际上有 12 个内核 (CPU)。 Windows 表示这 12 个内核正在执行超过 3000 个线程,这显然意味着它们并非全部同时运行。
-
你不明白它的好处吗?当我的操作系统(Windows 10 64 位)在 12 个逻辑 CPU 上执行 3000 多个线程(正在做的事情)时,看到的好处如何?如果它被限制为每个 CPU 一个线程并且一次只能做 12 件事情,你认为会发生什么?滚动、屏幕更新、在您的网络浏览器中同时加载多个选项卡、文件下载等都是不可能的。想想运行一个游戏,如果它必须在单线程上运行,它会如何运作。想想这个站点,每个 CPU 只有一个线程。它一次可以支持多少用户?
-
我从来没有说过关于硬件线程的事情。你继续使用这个词。我以前从未听说过。线程在软件中实现,并在 CPU 内核上执行。如果每个内核使用多个线程,则涉及上下文切换(CPU 必须为一个线程保存信息,切换到另一个(加载任何上下文信息),执行该线程,保存上下文,然后切换回第一个线程。如果你有 12 个内核,它们都可以同时运行(每个内核一个)。如果你有 13 个,一个内核必须执行两个线程,正如我刚刚描述的那样。我所说的只是看看而已。
标签: multithreading parallel-processing gpu core