![单线程四核 vs 超线程双核](https://linux22.com/image/1382883/%E5%8D%95%E7%BA%BF%E7%A8%8B%E5%9B%9B%E6%A0%B8%20vs%20%E8%B6%85%E7%BA%BF%E7%A8%8B%E5%8F%8C%E6%A0%B8%20.png)
假设我们有两个 CPU,一个是四核 3.2 Ghz,有 4 个核心,另一个是双核 3.2 Ghz,有 2 个核心,每个核心有 2 个线程(超线程)。作为一名程序员,我的假设是,4 核 4 线程的执行速度应该比 2 核 4 线程快,因为第二个 CPU 需要在线程之间切换才能模拟 4 个核心,而第一个 CPU 不需要执行这种切换,因为每个核心都可以独立运行。
我想确认我的假设是正确的,如果不是,请解释为什么一个比另一个更好。
答案1
我确实相信这是真的——因为超线程确实共享一些元素——特别是主要执行资源,您将能够同时运行 4 个完整线程,而不必等待这些资源被释放。
HT 的目的是以更小的芯片面积获得更好的性能 - 四核芯片通常比非 HT 双核芯片大 - 大约两倍,而 HT 双核芯片大约大 5%。在适当的工作负载下,四核芯片的速度可以提高两倍(不过,这不太可能,因为在大多数情况下,您可能不会满负荷运行 4 个线程),而双核 HT 处理器的性能会提高 15-30%(根据维基百科) 比双核非 HT 处理器更快。
实际核心越多通常越好。
答案2
从维基百科:
超线程的工作原理是复制处理器的某些部分(存储架构状态的部分),但不复制主要执行资源。这允许超线程处理器作为通常的“物理”处理器和主机操作系统的额外“逻辑”处理器出现(不支持 HTT 的操作系统将看到两个“物理”处理器),从而允许操作系统同时且适当地调度两个线程或进程。当不具备超线程的处理器中的当前任务不会使用执行资源时,尤其是当处理器停滞时,配备超线程的处理器可以使用这些执行资源来执行另一个计划任务。(处理器可能会因缓存未命中、分支预测错误或数据依赖性而停滞。)
如果您拥有四核系统,那么 4 个线程可以全部运行在核心上。如果您拥有双核超线程系统,那么 2 个线程可以全部运行在核心上,但如果拥有 4 个线程,线程 1 和 2 将共享一个核心,线程 3 和 4 将共享另一个核心。超线程允许两个线程并行运行(仅当它们不使用相同的处理器资源时)。因此,在理想情况下,您可能会获得高度并行化,但正如 Wikipedia 所述,性能提升不是 100%,而只有 15-30%。
答案3
在超线程中,任务 A 的核心的空闲时间(所述核心可能已经向磁盘发送了数据请求,等待磁盘寻找盘片区域,读取数据并将其发送回核心)可用于执行另一个任务 B。因此,当所谓的线程 2 为任务 B 提供服务时,如果任务 A 的数据提取请求已完成,任务 A 仍然必须等待核心完成线程 2。两个线程不能在一个核心中同时执行。同样,超线程利用了核心/处理器和计算机中各个子系统之间的速度不匹配。超线程充分利用了您的核心……就像满负荷利用一样。因此,如果您在浏览器中打开四个选项卡,则在 4 核系统中每个选项卡都有一个核心,而在 2 核系统中两个选项卡必须共享一个核心。