首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多CPU、多核和超线程有什么区别?

多CPU、多核和超线程有什么区别?
EN

Stack Overflow用户
提问于 2009-03-25 08:32:23
回答 4查看 34.8K关注 0票数 89

有人能向我解释一下多CPU、多核和超线程之间的区别吗?我总是对这些差异以及在不同场景中每种架构的优缺点感到困惑。

以下是我在网上学习和从别人的评论中学习之后的理解。

  1. 我认为超线程是其中最劣等的技术,但很便宜。其主要思想是复制寄存器,以节省上下文切换时间;
  2. 多处理器优于超线程,但由于不同CPU在不同的芯片上,不同CPU之间的通信时延比多核长,使用多芯片比多核通信开销大,功耗高;
  3. 多核处理器将所有CPU集成在一块芯片上,因此与多处理器相比,不同CPU之间的通信延迟大大减少。由于它使用一片芯片来包含所有CPU,所以它的功耗更低,而且比多处理器系统更便宜。

这是正确的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-25 08:39:23

多CPU是第一个版本:你会有一个或多个主板上有一个或多个CPU芯片。这里的主要问题是CPU必须向其他CPU公开它们的一些内部数据,这样它们就不会碍事。

下一步是超线程化。主板上有一个芯片,但它内部有两个部件,这样它可以同时执行两个指令。

目前的发展是多核的.这基本上是最初的想法(几个完整的CPU),但在一个单一的芯片。优点:芯片设计者可以很容易地将同步信号的附加电线放到芯片中(而不必将它们路由到一个引脚上,然后穿过拥挤的主板,再向上插入第二个芯片)。

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

编辑--你说得很对。我只想说几点:

  • 超线程在一个内核中同时跟踪两个上下文,从而将更多的并行性暴露在无序的CPU核心上。这会让执行单元充满工作,即使一个线程在缓存丢失、分支错误预测或等待高延迟指令的结果时也是如此。这是一种在不复制大量硬件的情况下获得更多总吞吐量的方法,但如果有的话,它会减缓每个线程的速度。有关更多细节,请参见本问答。,并解释了本段前一段的措辞有什么问题。
  • 多CPU的主要问题是运行在它们上的代码最终将访问RAM。有N个CPU,但只有一个总线来访问RAM。因此,您必须有一些硬件来确保:( a)每个CPU获得相当数量的RAM访问;( b)访问RAM的同一部分不会造成问题;和( c)最重要的是,当CPU 1写入CPU 2在其内部缓存中具有的某个内存地址时,将通知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多核比多cpu简单的主要原因是,在主板上,你根本不能运行两片芯片之间的所有连接,而这是你需要使同步有效的。另外,信号的顶部只有30厘米/毫秒(光速;在电线中,你通常要少得多)。别忘了,在多层主板上,信号开始相互影响(串扰)。我们喜欢认为0是0V,1是5V,但在现实中,"0“是介于-0.5V之间(当从1->0掉一条线时过度驱动),而.5V和"1”是任何高于0.8V的东西。

如果你把所有东西都放在一个芯片里,信号运行得更快,你可以拥有任意数量的信号(好吧,几乎:)。此外,信号串扰更容易控制。

票数 88
EN

Stack Overflow用户

发布于 2009-03-25 08:46:51

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

我希望你能在这里找到你需要的所有信息。

票数 4
EN

Stack Overflow用户

发布于 2009-03-25 08:40:25

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

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

维基百科关于这些主题的文章很能说明问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/680684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档