gpt4 book ai didi

multithreading - 超线程处理器内核可以完全同时执行两个线程吗?

转载 作者:行者123 更新时间:2023-12-03 13:14:36 26 4
gpt4 key购买 nike

我很难理解超线程。如果逻辑核心实际上不存在,那么使用超线程有什么意义呢? wikipedia文章指出:

For each processor core that is physically present, the operating system addresses two virtual (logical) cores and shares the workload between them when possible.



如果两个逻辑内核共享同一执行单元,则意味着其中一个线程将不得不搁置,而另一个线程要执行,也就是说,我不了解超线程的用处,因为实际上没有引入新的执行单元。我不能为此缠住头

最佳答案

有关现代CPU如何通过一次运行多个指令来查找和利用my answer on a softwareengineering.SE question的详细信息,请参见instruction-level parallelism (ILP)。 (包括Intel Haswell管道的框图,以及指向更多CPU微体系结构详细信息的链接)。也Modern MicroprocessorsA 90-Minute Guide!
您有一个带有很多执行单元的CPU和一个前端,可以使它们大部分都由工作来提供,但是只能在良好的条件下进行。诸如高速缓存未命中或分支错误预测之类的失速,或仅是有限的并行性(例如,执行一长串FP添加的循环,每4或5个时钟而不是每个时钟1个或2个时钟添加FP延迟的瓶颈(标量或SIMD))将导致每个周期的吞吐量远远少于4条指令,并使执行单元保持空闲状态。
HT(通常是Simultaneous Multithreading (SMT))的重点是,即使运行低ILP或大量停顿的代码(高速缓存未命中/分支预测错误),也要使那些饥饿的执行单元忙于工作。
SMT仅在管道中添加了一些额外的逻辑,因此它可以同时跟踪两个单独的体系结构上下文。因此,与具有两倍或四倍于全内核的内核相比,它的裸片面积和功耗要少得多。 (Knight's Landing Xeon Phi每个内核运行4个线程,主流Intel CPU运行2个线程。某些非x86芯片每个内核运行8个线程,主要针对数据库服务器类型的工作负载。)

常见误解
超线程不仅仅是优化的上下文切换。可以在缓存未命中时切换到其他线程的更简单设计,但是HT比这更先进。
在激活两个线程的情况下,前端在每个周期(在获取,解码和发布/重命名阶段)在线程之间交替,但是乱序内核实际上可以在同一周期中从两个逻辑内核执行uops
在通常交替的流水线阶段中,每当一个线程停止运行时,另一线程就会获得该阶段中的所有循环。 HT比仅固定交替好得多,因为一个线程可以完成许多工作,而另一个线程正在从分支的错误预测中恢复或等待高速缓存未命中。
请注意,一次最多可以处理10个未命中的缓存(从Intel CPU的L1D缓存中:这是LFB(行填充缓冲区)的数量,并且内存请求是流水线的。在加载(例如,指针追逐树或链接列表)时,CPU不知道从何处加载并且无法保持多个请求的执行,因此这对于两个线程并行等待高速缓存未命中很有用。
当两个线程处于 Activity 状态时,某些资源将进行静态分区,而某些资源则竞争性地共享。有关详细信息,请参见this pdf of slides。 (有关如何为Intel和AMD CPU实际优化asm的更多详细信息,请参阅Agner Fog's microarchitecture PDF。)

当一个逻辑核心“ sleep ”(即内核运行HLT指令或任何MWAIT进入更深的 sleep )时,物理核心将转换为单线程模式,并让仍处于 Activity 状态的逻辑核心拥有所有资源(包括完整资源)。重新排序缓冲区大小以及其他静态分区的资源),因此与在另一个线程只是由于高速缓存未命中而停顿时相比,在仍在运行的单个线程中查找和利用ILP的能力增加了更多。

顺便说一句,使用HT,某些工作负载实际上运行得更慢。如果您的工作集几乎不适合L2或L1D高速缓存,那么在同一内核上运行两个将导致更多的高速缓存未命中。对于非常好的高吞吐量代码,这些代码已经可以使执行单元保持饱和
(就像在高性能计算中优化的矩阵相乘)一样,禁用HT也很有意义。始终保持基准。
在Skylake上,我发现在我的四核i7-6700k上,使用8个线程而不是4个线程,视频编码(使用x265 -preset slower,1080p)快约15%。我实际上并未为4线程测试禁用HT,但是Linux的调度程序擅长在有足够的余地时不弹跳线程,也不会在单独的物理内核上运行线程。考虑到x265具有大量的手写asm,并且即使它本身具有完整的内核,也可以使每个周期运行非常高的指令,因此将其提高15%的速度是非常不错的。 (像我以前使用的较慢的预设受CPU限制的多于受内存限制的多。)

关于multithreading - 超线程处理器内核可以完全同时执行两个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47446725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com