谁能向我解释多 CPU、多核和超线程之间的区别?我总是对这些差异以及每种架构在不同场景中的优缺点感到困惑。
这是我在网上学习并从其他人的评论中学习后的当前理解。
这是正确的吗?
最佳答案
多 CPU 是第一个版本:您将拥有一个或多个带有一个或多个 CPU 芯片的主板。这里的主要问题是 CPU 必须将它们的一些内部数据暴露给另一个 CPU,这样它们就不会妨碍它们。
下一步是超线程。主板上的一个芯片,但它内部有一些部件,所以它可以同时执行两条指令。
目前的发展是多核的。它基本上是最初的想法(几个完整的 CPU),但在单个芯片中。优点:芯片设计人员可以轻松地将用于同步信号的额外电线放入芯片中(而不必将它们布线到引脚上,然后穿过拥挤的主板并向上进入第二个芯片)。
今天的 super 计算机是多cpu、多核的:它们有很多主板,通常有2-4个CPU,每个CPU都是多核的,每个都有自己的RAM。
[编辑] 你说得很对。只是几个小点:
想象一下,您有一个列表中的任务,并且您想将它们分散到所有可用的 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 的值。
如果你把所有东西都放在一个芯片里,信号运行得更快,你可以拥有任意数量的(嗯,几乎:)。此外,信号串扰更容易控制。
关于multicore - 多CPU、多核和超线程有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680684/