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