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

Multithreading 什么是CPU线程,它与代码中的逻辑线程有什么关系?,multithreading,cpu-architecture,hyperthreading,Multithreading,Cpu Architecture,Hyperthreading,我在文献中看到了一些较新的CPU,例如具有8核和16线程的CPU。他们在这里说什么?我在参考资料中看到了这一点,所以SPARCS也提到了这一点,当然这不是由代码生成的逻辑线程吗?这个超线程重新命名了吗?超线程(顺便说一下,是英特尔的商标)允许每个线程实际同时运行。因此,在这种情况下,您可以同时运行8X2应用程序线程 从宣传册上 英特尔Nehalem体系结构基于英特尔独特的45纳米高k金属栅技术工艺 Up to **8 cores** per processor Up to **16 thre

我在文献中看到了一些较新的CPU,例如具有8核和16线程的CPU。他们在这里说什么?我在参考资料中看到了这一点,所以SPARCS也提到了这一点,当然这不是由代码生成的逻辑线程吗?这个超线程重新命名了吗?

超线程(顺便说一下,是英特尔的商标)允许每个线程实际同时运行。因此,在这种情况下,您可以同时运行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操作时,该系统也会响应。例如,如果没有线程化,则在保存文档时,字处理器会出现暂停

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

克里斯

是的,处理器执行

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

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

Sun(和T1)还允许(其中Intel的实现称为“超线程”——Intel的商标)将单个内核显示为多个逻辑内核,以便在单个内核上执行多个线程

同步多线程背后的粗略想法是使用多个寄存器来存储处理器状态,因此看起来在一个内核中实际上有多个内核,因为它有多个完整的硬件寄存器集

虽然物理设施(如ALU和FPU)可能不会增加,但在物理内核上运行更多线程的更多寄存器集可以更好地利用可用处理器资源。在执行单个线程时,内核可能尚未饱和,但执行多个线程可能会使所有单元饱和到其最大潜能

那么这对程序员意味着什么呢

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


即使使用同步多线程,代码也会在每个逻辑核的一个线程上执行。

它不是重命名为“超线程”,而是“超线程”(它写在您提供链接的此网页上)


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

将操作系统级线程映射到硬件级线程(如问题中所述)取决于每个操作系统的线程模型


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

多线程处理器的一个极端是桶形处理器。这是SMT的一种形式,处理器以循环方式在多个线程之间平均分配插槽。为此,在使用同一组执行单元时,它只需要各种寄存器的副本。因此,在4个时钟周期内,它会将来自线程0-3的代码放入管道中

您可以想象这些处理器中的其余部分或多或少以类似的方式工作。由于处理器中存在控制或数据危险,它可能会耗尽空插槽,而不是平均分配插槽

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


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

写8X16时是指8乘以16吗?如果是这样的话,我猜它和旧的HT CPU一样,每个核心有两个线程,即总共16个线程,而不是128个。是的。根据英特尔的说法,这实际上意味着每个内核有16个线程。要做到这一点,他们需要确保模具上有大量的逻辑重复。显然,他们不是那个意思。你自己引用的部分是:每个处理器16个线程。我的观点是正确的-毕竟不是一个令人印象深刻的系统:-)。谢谢超线程在线程之间交替使用前端,但竞争性地共享后端的执行单元,UOP以通常的方式进行调度/