超线程能提供多大的提速?(理论上)


38

我想知道超线程CPU的理论速度是多少。假设100%并行化和0通讯-两个CPU的加速比为2。那么超线程CPU呢?

Answers:


59

正如其他人所说,这完全取决于任务。

为了说明这一点,让我们看一个实际的基准:

在此处输入图片说明

这取自我的硕士论文(当前不在线)。

这显示了字符串匹配算法的相对加速1(每种颜色都是不同的算法)。该算法在具有超线程功能的两个Intel Xeon X5550四核处理器上执行。换句话说:总共有8个内核,每个内核可以执行两个硬件线程(=“超线程”)。因此,基准测试最多测试16个线程(这是该配置可以执行的并发线程的最大数量)的加速。

四种算法中的两种(蓝色和灰色)在整个范围内或多或少地线性缩放。也就是说,它受益于超线程。

另外两个算法(红色和绿色;对于色盲人来说是不幸的选择)线性扩展多达8个线程。之后,他们停滞不前。这清楚地表明这些算法无法从超线程中受益。

原因?在这种特殊情况下,它是内存负载;前两个算法需要更多的内存来进行计算,并受到主内存总线性能的限制。这意味着当一个硬件线程正在等待内存时,另一个硬件线程可以继续执行。硬件线程的主要用例。

其他算法需要较少的内存,不需要等待总线。它们几乎完全受计算限制,仅使用整数算术运算(实际上是位运算)。因此,并行执行没有潜力,并行指令流水线也无益。


1即加速因子4表示该算法的运行速度是仅使用一个线程执行的速度的四倍。因此,根据定义,在一个线程上执行的每种算法的相对加速因子为1。


最佳答案:-)
Sklivvz 2011年

1
相对于内核数绘制的算法的实际速度是多少?也就是说,这些测试中最快的算法的速度增益是多少?就是想 :)。
crazy2be 2011年

@ crazy2be对于蓝线(Horspool的算法),使用16个线程,运行时间从4.16秒降低到0.35秒。因此加速为11.74。但是,这与超线程有关。当针对内核数绘制时,该算法在8个内核上的加速为7.17。
康拉德·鲁道夫

5
这个答案的唯一问题是我只能投票一次。这是一个主观问题的惊人客观答案;)
Journeyman Geek


20

问题是,这取决于任务。

超线程背后的概念基本上是所有现代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。

据说一些“类”的计算材料是有好处的(大概是通用的)。但是没有硬性规定,对于某些班级,它会使事情变慢。


2
尽管我一直在寻找“ 1.7时间加速”之类的方法,但这个答案还是很不错的,因为它不会在此问题上打出黑白对比。
米哈伊尔(Mikhail)

@Mikhail:关键是没有简单的因素-它取决于生活中的常见问题:-)。
sleske 2011年

4
要点是正确的。不过,有一个小问题:没有先验的理由可以说明,单核应该比多核受益于超线程。对于错误的任务,都不会有好处。对于正确的任务,两者都受益于相同的因素。
康拉德·鲁道夫

@Konrad:我想我要说的是,一个内核和两个内核之间的差异可能比4和8或2和4之间的差异更有价值。也就是说,拥有第二个内核,因为线程较差的应用程序可能会有所帮助多一点。
geoffc,2011年

“对于线程不足的应用程序” –这很重要。但实际上,大多数应用程序的线程支持都很差,因此您有一点要说。
康拉德·鲁道夫

5

我有一些轶事证据可以补充geoffc的答案,因为我实际上有一个具有超线程功能的Core i7 CPU(4核),并且在视频转码方面起到了一定作用,这是一项需要大量通信和同步但具有足够功能的任务并行性,可以有效地完全加载系统。

我的经验是,通常使用4个超线程“额外”内核来为任务分配多少个CPU,这相当于大约增加了1个CPU的处理能力。额外的4个“超线程”内核所增加的可用处理能力与从3​​个“真实”内核到4个“真实”内核的能力差不多。

可以肯定的是,这并不是严格的公平测试,因为所有编码线程都可能会争夺CPU中的相同资源,但对我而言,确实显示出整体处理能力至少有小幅提升。

显示其是否真正有用的唯一真实方法是在启用和禁用超线程的系统上同时运行一些不同的Integer / Floating Point / SSE类型测试,并查看在受控状态下有多少处理能力环境。


1
明确一点-它取决于应用程序。我敢肯定,由于核心0和核心0-h可以通过同一缓存进行通信,而无需使用慢速RAM,因此可以加快高通信计算的速度。
米哈伊尔(Mikhail)

1
@Mikhail,那么问题是,如果两个线程都需要大量的处理能力,那么它们都将争夺相同的资源,并且通过两个CPU共享的L3缓存进行通信会更好(i7具有L1和L2缓存)每个核心和一个共享的L3缓存),甚至是系统内存,并分别执行任务。这都是大规模的回旋练习……
穆库拜

3

正如其他人所说,这在很大程度上取决于CPU和工作负载。

英特尔说

在采用超线程技术的英特尔®至强®处理器MP上测得的性能表明,在该技术的通用服务器应用程序基准上,该性能可提高30%

(在我看来,这有点保守。)

还有另一篇较长的论文(我还没有读完),这里的数字更多。该论文的一个有趣的收获是,对于某些任务,超线程可以使Thins 变慢

AMD的Bulldozer架构可能很有趣。他们将每个核心描述为有效的1.5核心。这是一种极端的超线程或不合标准的多核,具体取决于您对其性能的信心程度。该片中的数字表明评论速度提高了0.5倍至1.5倍。

最后,性能还取决于操作系统。希望操作系统会优先于仅伪装成CPU的超线程将进程发送到实际的 CPU。否则,在双核系统中,您可能有一个空闲的CPU和一个非常繁忙的内核,其中有两个线程在运行。我似乎还记得,Windows 2000确实发生了这种情况,当然,所有现代操作系统都具有适当的功能。


1
操作系统必须确保线程不会互相阻塞时钟:)
Mikhail
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.