逻辑与物理 CPU 性能

逻辑与物理 CPU 性能

一台计算机有2个物理核心和4个逻辑核心(例如,配备i5-3210M处理器的计算机)。

当程序A运行时,顶部显示其中 1 个核心使用了 100%,其他 3 个核心几乎处于空闲状态。此情况下的吞吐量为 X。

我的问题是,如果我在 4 个逻辑核心上运行 4 个 A 实例,那么总吞吐量是 4 倍还是 2 倍?如果我只运行两个实例会怎样?

答案1

概念核心没那么简单。逻辑核心物理核心乘以线程可以在每个核心上运行。这被称为超线程。如果我的计算机有 4 核处理器,每个核心运行两个线程,那么我就有 8 个逻辑处理器。您可以通过运行来查看计算机的核心功能处理器命令。

如果一个处理器有 4 个核心,但它可以并行运行 8 个线程,这意味着它只有 4 个物理核心(处理单元)。但它的硬件可以支持最多 8 个线程平行线。显然,最多 4 个作业可以在核心中运行。核心中运行的一个作业,如果以任何方式停滞记忆或者I/O操作那么另一个线程可以使用该空闲的核心。

你现在应该明白了,如果你的计算机有 2 个物理核心,并且每个核心可以运行 2 个线程,那么你就有 4逻辑处理器。因此,由于您有 2 个物理核心,因此您只能运行 2 个实例,这意味着您正在使用单个物理核心的全部功能(一次 2 个线程)。因此吞吐量将为 50%。但如果任何时候一个线程处于空闲状态,则核心可以在该核心上加载一个线程。

您可以关闭超线程BIOS(就像是 ”英特尔 HT 技术“),并查看普通功能和超线程功能之间的差异,因为现在吞吐量将达到 100%。

答案2

即使核心数量远多于任务数量,它们也无法完美扩展。这是因为某些状态几乎总是共享的。不一定在任务中,而是内核。或者它们可能访问相同的资源,如网络或磁盘等。

表面贴装技术(即超线程)可能依赖于不同任务使用不同 CPU 执行单元的事实。因此,所谓的“指令级并行”可以在超标量CPU. 几乎任何现代 x86 处理器都是超标量的。

假设您有两个任务仅包含数字相加而没有其他 CPU 指令,那么是的,它们在同一个物理核心上运行时会发生冲突,可能会导致性能显著下降。

然而,大多数情况下情况并非如此,会发生各种情况。只要同一条命令不会同时(大致)出现在两个指令流中,CPU 执行单元的利用率就可以得到提高。

答案3

如果程序没有办法协调单独的实例,那么您几乎肯定不会得到任何改进。

例子:

如果我有一个单线程程序来计算 2 到 10 之间的质数,则运行该程序的单个实例将计算 2 到 10 之间的每个数字是否为质数,并发现 2、3、5、7 是质数。

如果我添加第二个实例而不对代码进行任何修改,第一个实例将计算 2-10 中的每个数字是否为质数,并发现 2、3、5、7 是质数,而第二个实例将计算 2-10 中的每个数字是否为质数,并发现 2、3、5、7 是质数。

这样做会导致同样的工作重复做两次,并且不会带来任何改进。

相关内容