我想知道超线程 CPU 的理论加速比是多少。假设 100% 并行化,0 通信 - 两个 CPU 将使加速比达到 2。超线程 CPU 怎么样?
答案1
正如其他人所说,这完全取决于任务。
为了说明这一点,让我们看一个实际的基准:
这是取自我的硕士论文(目前网上尚未提供)。
这表明相对加速1字符串匹配算法(每种颜色都是不同的算法)。这些算法在两个具有超线程的 Intel Xeon X5550 四核处理器上执行。换句话说:总共有 8 个内核,每个内核可以执行两个硬件线程(=“超线程”)。因此,基准测试最多使用 16 个线程(这是此配置可以执行的最大并发线程数)来测试加速。
四种算法中的两种(蓝色和灰色)在整个范围内或多或少呈线性扩展。也就是说,它受益于超线程。
另外两种算法(红色和绿色;对于色盲人士来说,这是一个糟糕的选择)在最多 8 个线程的情况下线性扩展。之后,它们停滞不前。这清楚地表明这些算法不会从超线程中受益。
原因是什么?在这种特殊情况下,是内存负载;前两种算法需要更多内存进行计算,并且受到主内存总线性能的限制。这意味着当一个硬件线程等待内存时,另一个可以继续执行;这是硬件线程的主要用例。
其他算法需要的内存较少,不需要等待总线。它们几乎完全受计算限制,并且只使用整数算术(实际上是位运算)。因此,没有并行执行的潜力,也没有从并行指令流水线中获益。
1即加速因子为 4 意味着算法的运行速度是仅使用一个线程执行的四倍。根据定义,每个在一个线程上执行的算法的相对加速因子为 1。
答案2
问题是,这取决于任务。
超线程背后的概念基本上是所有现代 CPU 都有多个执行问题。现在通常有十几个。分为整数、浮点、SSE/MMX/流(无论现在叫什么)。
此外,每个单元的速度都不同。例如,整数数学单元可能需要 3 个周期来处理某些事情,但 64 位浮点除法可能需要 7 个周期。(这些是虚构的数字,没有任何依据)。
无序执行有助于尽可能保持各个单元的充分运行。
但是任何单个任务都不会每时每刻都使用每个执行单元。即使拆分线程也无法完全解决问题。
因此,理论上假设有第二个 CPU,另一个线程可以在其上运行,使用未被音频转码使用的可用执行单元,其中 98% 是 SSE/MMX 内容,并且 int 和 float 单元除了一些东西之外完全处于空闲状态。
对我来说,这在单 CPU 世界中更有意义,伪造第二个 CPU 允许线程更轻松地跨越该阈值,并且几乎不需要(如果有的话)额外的编码来处理这个伪造的第二个 CPU。
在 3/4/6/8 核世界中,拥有 6/8/12/16 个 CPU 有帮助吗?不知道。有帮助吗?取决于手头的任务。
因此,要真正回答您的问题,这将取决于您进程中的任务、它正在使用的执行单元以及您的 CPU 中哪些执行单元处于空闲/未充分利用的状态并且可用于第二个假 CPU。
一些“类别”的计算材料据说会受益(大致如此)。但并没有硬性规定,而且对于某些类别,这会减慢速度。
答案3
我有一些轶事证据可以补充geoffc 的回答因为我实际上有一个具有超线程的 Core i7 CPU(4 核),并且玩过一些视频转码,这是一项需要一定程度的通信和同步但具有足够并行性的任务,因此您可以有效地完全加载系统。
根据我的经验,通常使用 4 个超线程“额外”核心来计算分配给任务的 CPU 数量,相当于大约 1 个额外 CPU 的处理能力。额外的 4 个“超线程”核心增加的可用处理能力与从 3 个“真实”核心增加到 4 个核心大致相同。
当然,这并不是一个公平的测试,因为所有的编码线程都可能会竞争 CPU 中的相同资源,但对我来说,它确实显示出整体处理能力至少略有提升。
唯一真正能证明它是否真的有帮助的方法是在启用和禁用超线程的系统上同时运行几个不同的整数/浮点/SSE 类型测试,并查看在受控环境中有多少处理能力可用。
答案4
正如其他人所说,这很大程度上取决于 CPU 和工作量。
对采用超线程技术的英特尔® 至强® 处理器 MP 进行性能测量表明,该技术在常见服务器应用程序基准测试中性能提升高达 30%
(我认为这有点保守。)
还有一篇较长的论文(我还没有读完),其中更多数字请点击此处。该论文的一个有趣结论是,超线程可以使慢点对于某些任务。
AMD 的 Bulldozer 架构可能很有趣。他们将每个核心描述为实际上有 1.5 个核心。这取决于您对其可能的性能有多自信,这是一种极端的超线程或低于标准的多核。该文章中的数字表明评论速度提高了 0.5 倍到 1.5 倍。
最后,性能还取决于操作系统。操作系统希望将进程发送到真实的CPU 优先于那些只是伪装成 CPU 的超线程。否则在双核系统中,您可能会有一个空闲的 CPU 和一个非常繁忙的核心,其中两个线程在抖动。我似乎记得这种情况发生在 Windows 2000 上,当然,所有现代操作系统都具有适当的能力。