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

标签 multithreading cpu-architecture hyperthreading

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

最佳答案

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

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

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

孙氏 UltraSPARC T2 (和 T1)也允许 simultaneous multithreading (其中英特尔的实现被称为超线程——英特尔的商标)它允许单个内核表现为多个逻辑内核,以在单个内核上执行多个线程。

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

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

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

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

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

关于multithreading - 什么是 CPU 线程,它与代码中的逻辑线程有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916048/

相关文章:

c - 使用 posix C 同时多次轮询信号量

memory - boost 锁无锁spsc_queue缓存访问

assembly - avx指令中的源寄存器何时可以重用

java - 自定义 Runnable 实现,用于检查每行代码之间的 Thread.currentThread().isInterrupted()

java - 同步关键字 - 它是如何工作的?

Python多处理池: Why doesn't adding additional processes seem to improve performance on a hyperthreaded system?

c++ - OpenMP:不要使用超线程内核(一半 `num_threads()` w/超线程)

java - 决定线程池大小时如何看待超线程?

c# - 当 PC 从 sleep 中唤醒时,计时器会发生什么情况?

assembly - 为什么 push first 减少堆栈指针?