首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们说"4核8线程“是什么意思?

当我们说"4核8线程“是什么意思?
EN

Stack Overflow用户
提问于 2022-11-11 21:07:32
回答 2查看 51关注 0票数 0

当我在我的主机上运行lscpu时,它显示

代码语言:javascript
复制
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4

我的主机有4个物理CPU,但由于每个内核有2个线程,所以有8个逻辑CPU。好的,“每个内核两个线程”意味着一个内核可以同时执行两个线程,就好像我们已经将CPU容量翻了一番一样?这就是并行的概念吗?

虽然我们有另一个概念,即“一个进程可以有多个线程”,但我认为这意味着一个进程可以通过切换上下文来处理多个线程并发,但不一定在并行中。在大多数情况下,一个CPU可以一次执行一个线程,对吗?

我想确认我以上的理解是正确的。谢谢

并发和并行差分参考文献:并发性和并行性有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-11 22:58:07

这个概念被称为SMT( 同时多线程 )。它在许多处理器中实现,从x86-64 (包括AMD和Intel)到POWER。这样做的目的是同时执行两个线程。对于特定的目标体系结构,某些操作可以并行。

一个内核可以同时执行两个线程,就像我们的CPU容量翻了一番一样?

不是的。硬件线程(也称为逻辑核)不等同于核心(即。(与物理核相反)。一些处理器单元被静态地分配给硬件线程,而一些单元被动态地分配给硬件线程,这意味着线程共享可用的资源。

最初的想法是在某些操作(如内存读取)上,当内核停止运行时,执行一些有用的操作。通过两个硬件线程,如果当前线程正在等待内存,一个内核就可以执行另一个线程的指令,例如,由于缓存失败。受RAM延迟限制的内存绑定并行代码(如朴素转换或链表遍历)可以从这种机制中获益。

随着时间的推移,SMT的实施有了很大的改善。特别是最近在x86-64处理器中。现在,现代处理器的硬件线程可以真正并行地执行计算指令。例如,Intel Skylake处理器可以在每一个周期执行最多4个算术指令,这要感谢4 ALU。只有当指令是独立的(在目标循环期间),一个线程才能每周期执行4条指令。这并不总是可能的,因为有些循环本身是连续的,并且每个循环不包含足够的独立指令(例如。累积总额)。在启用了双向SMT的情况下,两个软件线程可以调度在同一个内核上,内核可以在给定的周期内完全并行地执行每个线程的2个指令。它甚至可以实时地负载关于每个线程的需要的指令数(例如。每周期1vs3次指令)。最后,在像Skylake这样的SMT处理器上,延迟限制代码的速度可以达到的2倍。尽管如此,并没有加速已经能够充分使用所有可用处理器计算单元的代码。例如,使用优化的BLAS库进行并行矩阵乘法时,每核运行2个软件线程的速度几乎总是比每个核心只有一个软件线程的情况下慢。执行速度可能更慢,因为硬件线程共享一些资源,比如缓存,并且它们可以与每个内核同时运行的2个线程发生冲突。简单地说,高效的代码不应该从中受益,但是人们倾向于编写效率低下的代码,编译器不能够生成高效的代码,使核心的计算单元饱和(他们经常需要一些帮助)。

虽然我们有另一个概念,即“一个进程可以有多个线程”,但我认为这意味着一个进程可以通过切换上下文并发地处理多个线程,但不一定是并行的。

我想澄清一下:软件线程和硬件线程是两个非常不同的东西,尽管名字是

软件线程是一个逻辑OS单元,可以在硬件线程上调度。硬件线程可以看作是处理器核心的物理部分(它实际上是一个天真的简单视图)。软件线程是OS进程的一部分。操作系统负责就绪软件线程的调度。进程没有调度,软件线程(至少在现代操作系统上是这样)。两个不同进程的软件线程可以在一个具有多个核的处理器上并行运行(甚至在一些双向SMT核上)。

在大多数情况下,一个CPU可以一次执行一个线程,对吗?

"CPU“一词在这里并不清楚:它可能意味着与上下文有关的不同事物。

如果“一个CPU”指的是现代微处理器芯片,它通常是多核的,那么明确地说,no。例如,软件线程确实可以在不同的核心上并行运行。

如果“一个CPU”是指一个核心(就像在高性能计算中一样),那么它取决于:一个单向SMT核心一次只能执行一个线程,而一个双向SMT核心一次只能执行两个线程。

在老的微处理器芯片上,一个内核没有SMT,一个线程一次运行,上下文切换被用来从用户的角度并发执行线程,而不是并行的。这一次已经过去了(自从近20年以来),除了在一些嵌入式微处理器芯片上。

票数 2
EN

Stack Overflow用户

发布于 2022-11-11 22:51:16

是this...parallel吗?

也许吧。

https://en.wikipedia.org/wiki/Hyper-threading是英特尔的商标*,用于拥有两套完整上下文寄存器的处理器核心。超线程CPU可以代表两个线程并发执行代码,而无需操作系统进行任何干预(即不需要上下文切换)。

这两个并发执行实际上是并行执行的程度因CPU模型而异,这取决于这两个线程实际在做什么。例如(我只是编了这个部分,因为我已经有几十年没有考虑任何特定的CPU体系结构了),如果某个“超级线程”CPU每个内核有两个整数ALU,那么这两个线程可能都可以并行执行整数操作,但是如果每个内核只有一个FPU,那么它们必须轮流使用它。

有些超线程CPU模型比其他模型具有更多重复的https://en.wikipedia.org/wiki/Execution_unit,因此可以并行化更多的执行部分。

* AMD称他们的类似功能为“双向同时多线程”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74408140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档