什么是CPU线程,它与代码中的逻辑线程有什么关系?

时间:2009-05-27 14:33:41

标签: multithreading cpu-architecture hyperthreading

我在文献中已经看到一些较新的CPU,例如Intel Xeon "Nehalem-EX"有8个核心和16个线程。他们在这里谈什么?我在引用中看到了这一点,所以SPARCS也是如此,这肯定不是代码产生的那种逻辑线程吗?这种超线程被重新命名了吗?

5 个答案:

答案 0 :(得分:10)

是的,Nehalem-based处理器实施Hyper-threading

您所指的新Nehalem-EX具有8个物理内核,其中每个内核可被视为2个逻辑内核,总共16个逻辑内核,允许在单个处理器上执行16个应用程序线程。

这与支持超线程的奔腾4处理器以及最近在Atom处理器上使用的技术相同。我的Eee PC有一个单核Atom处理器,它有两个逻辑核心--Windows任务管理器将显示两个CPU图形;每个逻辑核心一个。

Sun的UltraSPARC T2(以及T1)也允许simultaneous multithreading(英特尔的实施称为超线程 - 英特尔的商标),它允许单个核心显示为多个逻辑核心在单个核心上执行多个线程。

同时多线程背后的粗略思想是有多个寄存器来存储处理器状态,因此在单个内核中实际上有多个内核,因为它有多个硬件寄存器全套。

虽然ALU和FPU等物理设施可能不会增加,但是在物理内核上运行更多线程的更多寄存器集可以更好地利用可用的处理器资源。执行单个线程时核心可能尚未饱和,但执行多个核心可能会使所有单元充分发挥其潜力。

那对程序员来说意味着什么?

这意味着我们仍然需要编写多线程软件 - 拥有一个只有一个线程的程序只能使用一个逻辑核心。只有拥有编写良好的多线程代码,我们才能利用这些处理器提供的大量逻辑内核。

即使同时进行多线程处理,代码也会在每个逻辑核心的一个线程上执行。

答案 1 :(得分:4)

多线程处理器的一个极端是桶式处理器。这是SMT的一种形式,其中处理器以循环方式均等地划分多个线程之间的时隙。为此,在使用相同的执行单元集时,它只需要各种寄存器的副本。因此,在4个时钟周期内,它会将线程0-3中的代码放入流水线中。

您可以将其余的处理器视为或多或少地以类似的方式工作。由于处理器中的控制或数据危险,它可能仅仅使用空的插槽而不是同等地分配插槽。

例如,当采用分支时,可能需要刷新管道中的指令。一些插槽可以用于其他线程,而不是完全冲洗所有内容。整个想法是通过不浪费CPU周期来提高性能。

这就是多线程在硬件中的工作方式。

答案 2 :(得分:2)

它不是重新命名的超级线程 - 它是超线程的(它是在你给这个链接的网页上写的)。

简单地说,处理器告诉操作系统它有16个内核,因此它可以在双倍数量的内核上平衡任务。超线程技术带来了一些好处,因为在某些情况下,来自两个不同程序/线程的两个不同指令可以同时在一个核上执行。但肯定不会加速200%。我没有在这样的处理器上工作,但我认为你可以获得大约10%-20%的额外CPU时间。

答案 3 :(得分:1)

超线程(顺便说一下,INTEL的商标)允许每个线程实际同时运行。因此,在这种情况下,您可以同时运行8X2应用程序线程。

从宣传册中......

英特尔Nehalem架构基于英特尔独特的45纳米高k金属栅极技术流程

 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时也具有响应性的系统外观。例如,如果没有线程,您的文字处理器在保存文档时似乎会停止。

多年来,我一直反对在我的桌面应用程序中使用多个线程的想法 - 它使代码复杂化并可能降低性能 - 想想所有那些需要操作系统内核参与的互斥操作。随着线程实际并行执行的出现,我的反对意见减少了,但我仍然认为单个进程中的多个进程而不是多个线程是更好的方法。

克里斯

答案 4 :(得分:1)

每个操作系统的线程模型都可以将操作系统级线程映射到硬件级线程,例如问题中描述的线程。

应用程序员使用的高级编程语言产生的逻辑线程仍然是从硬件中删除的操作系统级别,除非你当然是在谈论执行映射的操作系统代码。