线程可以算作CPU吗?

线程可以算作CPU吗?

lscpu所以我在终端中输入并看到了以下内容:

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

没有。由于以下公式,此处 CPU 的数量为 4: No. of CPUs = Sockets X Cores per socket X Threads per Core

但问题是,CPU到底是什么?为什么我们在上面的公式中包含线程?

答案1

这取决于您在寻找什么。

当你购买处理器时,它会清楚地说明超线程和核心数量,以及是否可以在多处理器方式(多个插槽)上使用它。

让我们忘记我们有多个物理 CPU 的情况。

我们在一个芯片上有多个核心:它们可能共享一些缓存,否则它们几乎是独立的。但仍然:有些任务应该协调,因此使用 4 个核心时,您的“能力”(通常)不会是 1 个单核的 4 倍。

超线程:这个比较棘手:这是Intel的一个技巧(也在多核之前),在那里你可以模拟多个CPU。实际上,一次只能执行一个线程,但 CPU 经常需要暂停(例如等待内存访问或写入)。通过超线程,CPU 可以快速切换到第二个虚拟 CPU。

因此,使用超线程,与仅使用一个普通 CPU 相比,通常可以获得更好的性能,而且几乎不需要任何成本(更多的逻辑、高速缓存和寄存器,但没有重复的晶体管),但两个核心仍然更好(仍然不等于两个两个 CPU,但在数值计算上,两个任务是完全独立的,内核不会打扰任务)。

如果您有并行进程,我通常会使用线程乘以核心(如果存在离散数量的 IO,我通常会在线程或最终结果中加一)。在这种情况下,您可以获得更好的性能(假设没有其他 CPU 密集型任务):您使用最大功率,即使在单个内核等待内存数据时也是如此。

但为了获得加速,我只会使用核心数量(记住我会得到一些更好的数据)。

所以,这取决于你在寻找什么。如果您正在执行复杂的任务,您可能会测量更多的进程并优化它们(缓存、内存、线程、核心、CPU、MPI...)。每个程序的资源都不同。

相关内容