超线程如何更高效?

超线程如何更高效?

我读了很多关于超线程及其工作原理的文章。有一件事我仍无法“理解”,那就是它怎么会比根本不使用超线程更有效率呢?

超线程是指两个线程可以在一个单线程核心上运行。这也意味着在那个单核中,只能运行 1 个线程。无论超线程允许在单核上运行 200 个还是 2 个线程,在给定时间内仍然会运行 1 个线程……然后进行切片(但这不是我的问题)。

那么,有人可以指出它是如何提高我们的表现的吗?

答案1

关键在于硅片空间与性能。

一个常规的单线程核心可以做很多事情。它可以花费很多周期来对缓存中的数据执行操作。它可能会执行大型矩阵乘法,其中几乎每次命中都需要访问内存。(以及其他我将跳过以保持重点的内容)。平均而言,它会同时做这两件事。

两台独立的计算机可以以两倍的速度完成同一件事。

一台拥有两个内核且只有一种访问内存的方式的计算机的性能会有所不同。如果它运行两个进程来计算其缓存中的项目,那么它的速度会快一倍。如果两个实际内核都执行尝试访问内存的操作,那么它们都需要等待最多一半的周期才能轮到它们访问,并且设置会比两台独立的单核计算机慢。不过,它的速度大约会快 80-100%。代价是增加 100% 的硅片。

Treading 将此提升到一个新的水平。它们不会复制整个核心。它们只复制最常用的部分。

理想情况下,该部分被复制,两个操作可以同时运行,速度加倍。最坏的情况下,复制的部分将始终需要等待访问。

在实践中平均值速度提升约 30%,所需额外硅片数量却不到 30%。这比复制整个核心更有效率。

或者在一张非常粗糙的桌子上

1 核速度 100% 硅 100% 2 核速度 180-200% 硅 200% 1 核带 HT速度 130% 硅 120% -->
1 core              100% cost.    100%     speed    Efficiency 100/100
2 cores             200% cost.    180-200% speed    Efficiency 190/200
1 core with HT      120% cost.    130%     speed    Efficiency 130/120

在典型的 X86 内核上,带有一个附加线程的 HT 及其指令通常在成本(使用的硅空间量转化为成本)与性能上获胜。

相关内容