多CPU,多核和超线程


79

有人可以向我推荐一些文档来说明多CPU,多核和超线程之间的区别吗?我总是对这些差异以及每种架构在不同情况下的优缺点感到困惑。

编辑:这是我在网上学习并从他人的评论中学习后的当前理解;有人可以评论评论吗?

  1. 我认为超线程是其中最差的技术,但价格便宜。它的主要思想是重复寄存器,以节省上下文切换时间。
  2. 多处理器比超线程更好,但是由于不同的CPU在不同的芯片上,因此不同CPU之间的通信比多核具有更长的延迟,并且使用多芯片比多核具有更多的开销和更多的功耗。 ;
  3. 多核将所有CPU集成在单个芯片上,因此与多处理器相比,不同CPU之间的通信延迟大大降低了。由于它使用一个芯片来包含所有CPU,因此与多处理器系统相比,它消耗的功率更少,成本也更低。

预先感谢乔治


超线程并不逊色。它非常有用,尤其是对于服务器。ILP的收益递减(通过重新安排顺序指令使处理器保持繁忙)。超线程是增强并行性的另一种选择:执行多个硬件线程不会产生太多开销。
艾米特

关于多核和多处理器的其他观点,您认为我的观点正确吗?哪里不对了?
09年

1
@ George2-您的编辑非常正确。这就是整个想法。:)在服务器上可以得到的最好的东西可能是多核多CPU,但是通常使用多核是最好的选择!
博格丹·康斯坦丁内斯库2009年

感谢Bogdan,您的确认使我更加自信!:-)
George2,2009年

那是对超线程的可怕描述。要点是放弃一些单线程性能以获得更高的总吞吐量,而乱序内核的前端只需要一点额外的硬件。请参阅此问与答,询问已接受答案中的类似段落(在修改该问题之前,请先进行修改)。
彼得·科德斯

Answers:


86

多CPU是第一个版本:您将有一个或多个主板上装有一个或多个CPU芯片。这里的主要问题是,CPU必须将其内部数据的一部分暴露给另一个CPU,这样才不会妨碍他们。

下一步是超线程。主板上有一个芯片,但内部有一些部件两次,因此可以同时执行两条指令。

当前的发展是多核的。这基本上是最初的想法(几个完整的CPU),但在单个芯片中。优点:芯片设计人员可以轻松地将用于同步信号的其他导线放入芯片中(而不是必须将它们通过引脚引出,然后通过拥挤的主板并向上延伸到第二个芯片)。

当今的超级计算机是多CPU多核的:它们有很多主板,板上通常装有2-4个CPU,每个CPU是多核的,每个都有自己的RAM。

[编辑]您完全正确。几点要点:

  • 超线程在单个内核中一次跟踪两个上下文,从而为乱序的CPU内核提供了更多的并行性。即使一个线程因高速缓存未命中,分支错误预测或等待高延迟指令的结果而停滞,这也使执行单元保持工作量。这是一种无需复制大量硬件即可获得更高总吞吐量的方法,但是如果有的话,它会分别降低每个线程的速度。 有关更多详细信息请参见此问答,以及对本段以前的措词有何解释。

  • 多CPU的主要问题是在它们上运行的代码最终将访问RAM。有N个CPU,但只有一根总线可以访问RAM。因此,您必须具有一些硬件,以确保a)每个CPU获得相当数量的RAM访问,b)访问RAM的相同部分不会引起问题,并且c)最重要的是,将通知CPU 2当CPU 1写入CPU 2在其内部高速缓存中具有的某个内存地址时。如果没有发生,CPU 2将愉快地使用缓存的值,而忽略了它已过时的事实

    试想一下,您在列表中有任务,并且想要将其分散到所有可用的CPU中。因此,CPU 1将从列表中获取第一个元素并更新指针。CPU 2将执行相同的操作。出于效率方面的考虑,两个CPU不仅将少量字节复制到高速缓存中,还将整个“高速缓存行”(无论可能是什么)复制。假设是,当您读取字节X时,您很快也会读取X + 1。

    现在,两个CPU在其缓存中都有内存的副本。然后,CPU 1将从列表中获取下一项。如果没有高速缓存同步,它也不会注意到CPU 2也更改了该列表,并且它将开始与CPU 2在同一项目上工作。

    这实际上使多CPU变得如此复杂。如果整个代码仅在单个CPU上运行,则这种副作用会导致性能比您得到的性能差。解决方案是多核的:您可以轻松地添加所需数量的连线以同步缓存;从一个高速缓存(更新你甚至可以将数据复制到另一个部分,而无需刷新和重新加载缓存线的),等等,或者缓存逻辑可以确保所有的CPU获得相同的缓存行,当他们访问的同一部分真正的RAM,只需将CPU 2阻塞几纳秒,直到CPU 1进行更改。

[EDIT2]多核比multi-cpu更简单的主要原因是,在主板上,您根本无法在需要使同步有效的两个芯片之间进行所有布线。另外,信号仅在30cm / ns的顶部传播(光速;在电线中通常要少得多)。而且不要忘记,在多层主板上,信号开始相互影响(串扰)。我们喜欢认为0是0V,1是5V,但实际上,“ 0”介于-0.5V(从1-> 0断开线时为过驱动)和.5V之间,而“ 1”则高于0.8V。

如果您将所有内容都放在一个芯片中,则信号的运行速度将大大提高,并且您可以拥有任意数量的信号(嗯,几乎是:)。而且,信号串扰更容易控制。


3
您对超线程的概念可能会引起误解,因为超线程“只是”模拟了多个线程的并行执行-但主要是尝试通过内置CPU逻辑来提高多线程性能。
JC伊纳西奥

@jcinacio,超线程会提高多进程性能吗?为什么?
2009年

@Aaron,1.在向您学习后,我在原始帖子中编辑了我的当前要点。您能帮忙评论和评论吗?2.含义是“将其内部数据的一部分公开给另一个CPU,这样就不会妨碍他们。” 在您的帖子中?
2009年

@Aaron,您的回答非常好,我的最后一个问题,为什么您说多核CPU解决了CPU状态同步/等待RAM问题?我认为,如果代码逻辑相同,则同步和等待RAM问题仍然存在。任何意见?
2009年

1
@AmitP请注意,过于广泛的问题往往会在Programmers上被否决并关闭,请参阅Programmers.SE上发生了什么?一种堆栈溢出指南
蚊蚋

4

您可以在英特尔网站上耶鲁大学的短篇文章中找到有关双CPU,多核和超线程的一些有趣文章。

希望您在这里找到所需的所有信息。


博格丹,我已经在原始帖子中编辑了我目前的观点。您能帮忙评论和评论吗?在阅读您推荐的链接后,我学会了它们。
2009年

@ George2-您的编辑非常正确。这就是整个想法。:)您可以在服务器上获得的最好的东西可能是多核多CPU
Bogdan Constantinescu 2009年

2
两个链接都断开了:(
rkachach '16

2

简而言之:多CPU或多处理器系统具有多个处理器。多核系统是在同一芯片上具有多个处理器的多处理器系统。在超线程中,多个线程可以在同一处理器上运行(也就是说,这些多个线程之间的上下文切换时间非常小)。

目前,多处理器已经存在了30年,但大部分都在实验室中。多核是新流行的多处理器。如今,服务器处理器与多处理器一起实现超线程。

有关这些主题的维基百科文章颇具说明性。


阿米特(Amit),1.在向您学习后,我在原始帖子中编辑了我的当前要点。您能帮忙评论和评论吗?2.什么是职位空缺?
2009年
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.