我在文献中看到了一些较新的 CPU,例如Intel Xeon “Nehalem-EX”,它们具有 8 个内核和 16 个线程。他们在这里谈论什么?我在参考文献中也看到了这一点,所以 SPARCS 也肯定这不是由代码产生的那种逻辑线程吗?这种超线程是否被重新命名?
5 回答
是的,基于 Nehalem 的处理器实现了超线程。
您所指的新 Nehalem-EX 有 8 个物理内核,每个内核可以看作 2 个逻辑内核,总共 16 个逻辑内核,允许在单个处理器上执行 16 个应用程序线程。
这与支持超线程的 Pentium 4 处理器以及最近的 Atom 处理器中使用的技术相同。我的 Eee PC 有一个单核 Atom 处理器,它有两个逻辑核心——Windows 任务管理器将显示两个 CPU 图表;每个逻辑核心一个。
Sun 的UltraSPARC T2(和 T1)还允许同时多线程(英特尔的实现称为超线程——英特尔的商标),它允许单个内核显示为多个逻辑内核,以在单个内核上执行多个线程。
并发多线程背后的粗略思想是有多个寄存器来存储处理器状态,所以看起来一个内核实际上有多个内核,因为它有多个全套硬件寄存器。
虽然 ALU 和 FPU 等物理设施可能不会增加,但拥有更多寄存器集以在物理内核上运行更多线程可以更好地利用可用处理器资源。执行单个线程时内核可能尚未饱和,但执行多个线程可以使所有单元充分发挥其潜力。
那么这对程序员意味着什么呢?
这意味着我们仍然需要编写多线程软件——只有一个线程的程序将只能使用一个逻辑核心。只有拥有编写良好的多线程代码,我们才能利用这些处理器提供的大量逻辑内核。
即使使用同时多线程,代码也是在每个逻辑核心一个线程上执行的。
多线程处理器的一个极端是桶形处理器。这是一种 SMT 形式,其中处理器以循环方式平均分配多个线程之间的插槽。为此,它只需要在使用同一组执行单元时复制各种寄存器。因此,在 4 个时钟周期内,它会将线程 0-3 中的代码放入流水线中。
您可以认为这些处理器的其余部分或多或少地以类似的方式工作。由于处理器中的控制或数据危害,它可能只是用完空的插槽,而不是平均分配插槽。
例如,当采用分支时,可能需要刷新流水线中的指令。一些插槽可以用于其他线程,而不是完全刷新所有内容。整个想法是通过不浪费 CPU 周期来提高性能。
这就是多线程在硬件中的工作方式。
超线程(顺便说一下,INTEL 的商标)允许每个线程实际同时运行。因此,在这种情况下,您可以同时运行 8X2 应用程序线程。
从宣传册...
基于英特尔独特的 45nm 高 k 金属栅极技术工艺的英特尔 Nehalem 架构
Up to **8 cores** per processor
Up to **16 threads per processor** with Intel® Hyper-threading
2.3 billion transistors
将此与单 CPU、单核系统进行比较,在单核系统中,每个线程都必须被调度,并且最多只有一个线程处于活动状态——一个正在运行的 CPU 绑定任务,而其他的则等待 I/O 传输。
最初,线程要么用于建模一组并发活动(不是模型实际上不是并行运行),要么用于产生即使在执行 I/O 时也能响应的系统外观。例如,如果没有线程,您的文字处理器会在保存文档时停止。
多年来,我一直反对在我的桌面应用程序中使用多个线程的想法——这会使代码复杂化并可能降低性能——想想所有需要操作系统内核参与的互斥操作。随着线程实际上并行执行的出现,我的反对意见减少了,但我仍然相信多个进程而不是单个进程中的多个线程是更好的方法。
克里斯
它不是重命名的超线程 - 它是超线程(它写在您提供链接的此网页上)。
简单地说,处理器告诉操作系统它有 16 个内核,因此它可以在双倍内核上平衡任务。超线程技术带来了一些好处,因为在某些情况下,来自两个不同程序/线程的两条不同指令可以同时在一个内核上执行。但可以肯定的是,它不会提供 200% 的加速。我没有在这样的处理器上工作,但我认为你可以获得大约 10%-20% 的额外 CPU 时间。
将操作系统级线程映射到问题中描述的硬件级线程取决于每个操作系统的线程模型。
由应用程序程序员使用的高级编程语言产生的逻辑线程仍然是从硬件中删除的操作系统级别,除非您当然在谈论执行映射的操作系统代码。