2

我在 Linux 2.6.39 x86_64 上的 Core i7 930 @2.8GHz(四核)上的 BIOS 中启用和禁用了超线程,对 wine 的编译时间进行了多次测量。每次测量都是这样的:

git clean -xdf
./configure --prefix=/usr
time make -j$N

其中N是从 1 到 8 的数字。

这是结果(“速度”从时间(1)开始为 60/真实):

在此处输入图像描述

此处蓝线对应 HT 禁用,紫色线对应 HT 启用。似乎启用 HT 后,使用 1-4 个线程比不使用 HT 慢。我想这可能与内核没有将进程分配到不同的内核并重用已经很忙的内核的第二个线程有关。

所以,我的问题是:如何强制内核为每个内核调度 1 个进程提供比向同一内核的不同线程添加更多进程更高的优先级?或者,如果我的推理是错误的,对于并行运行的 1-4 个进程,我如何才能使 HT 的性能不比不使用 HT 差?

4

2 回答 2

3

英特尔芯片上的超线程被实现为物理核心的某些元素的复制,但没有足够的电子设备成为独立的核心(例如,它们可能共享指令解码器,但我不记得英特尔实现的细节)。

将具有 HT 的物理内核映像为 1.5 个物理内核,您的操作系统将其视为 2 个真实内核。不过,这并不等于 1.5 倍速度(这可能因用例而异)

在您的示例中,非 HT 最多更快 4 个线程,因为没有一个内核与其 HT 管道共享工作。您会在 4 个线程上方看到一条平坦线,因为现在您只有 4 个执行线程,并且您会在线程之间获得一些额外的开销上下文切换。

在 HT 示例中,最多 4 个线程可能会慢一些,这可能是因为其中一些线程被分配给一个真正的核心并且它是 HT,因此由于这两个执行线程共享物理资源,您正在失去性能。在 4 个线程以上,您会看到额外执行线程的好处,但您会看到收益递减的开始。

您可能可以在这两种情况下匹配最多 4 个线程的性能,但可能无法与编译作业匹配。我认为对于为设置处理器亲和性而产生的许多进程。如果您改为使用 OpenMP 或 MPI 运行真正的并行作业,其中 X<=4 线程绑定到特定的实际 CPU 内核,我认为您会看到 HT-off 和 -on 之间的性能相似。

于 2013-12-15T22:50:38.743 回答
0

给定线程数 <= 实际内核数,使用 HT 应该更慢,因为(粗略地考虑)您可能会将内核速度减半。1

请记住,通常更多的内核并不比 FASTER 内核更好。 事实上,在开发多核系统上投入这么多工作的唯一原因是制造越来越快的系统变得越来越困难。因此,如果您不能拥有 20 Ghz 处理器,则必须使用 8 x 3 Ghz 处理器。

我相信,HT 的主要目的是在每个线程不一定要尽可能多地吞噬处理器的情况下作为一种优势。它正在执行一些由与用户交互控制的特定任务,例如 CAD 内容、​​视频游戏等;这些是受益于多任务处理的应用程序。相比之下,服务器平台——其中主要应用程序倾向于线程独立的任务,这些任务不受依赖于其他任何东西的支配,因此尽可能快地以最佳方式运行——并不能直接受益于多任务处理;他们受益于速度make属于同一类别,尽管线程之间的相互依赖程度可能更大,这就是为什么您会看到 4-8 个线程的 HT 优势。


1. 这是一个简化。HT 并不是简单地将内核数量增加一倍并将其速度减半,但无论使用何种动态,系统每秒的处理器周期总数都不会提高。都是一样的——只是更加支离破碎

于 2013-12-15T20:44:31.457 回答