Skip to content Skip to footer

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

这个概念被称为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年以来),除了在一些嵌入式微处理器芯片上。

Copyright © 2088 神州国际网游活动库 All Rights Reserved.
友情链接