多线程
编辑在计算机体系结构中,多线程是中央处理器 (CPU)(或多核处理器中的单核)在操作系统支持下并发提供多个执行线程的能力。 这种方法不同于多处理。 在多线程应用程序中,线程共享单个或多个内核的资源,包括计算单元、CPU 缓存和转换后备缓冲区 (TLB)。
在多处理系统包括一个或多个内核中的多个完整处理单元的情况下,多线程旨在通过使用线程级并行性和指令级并行性来提高单个内核的利用率。 由于这两种技术是互补的,因此它们在几乎所有具有多个多线程 CPU 和具有多个多线程内核的 CPU 的现代系统架构中结合使用。
概览
编辑自 1990 年代后期以来,随着进一步利用指令级并行性的努力停滞不前,多线程范式变得越来越流行。 这使得吞吐量计算的概念从更专业的事务处理领域重新出现。 尽管进一步加速单个线程或单个程序非常困难,但大多数计算机系统实际上是在多个线程或程序之间进行多任务处理。 因此,提高所有任务吞吐量的技术会带来整体性能提升。
吞吐量计算的两种主要技术是多线程和多处理。
优势
如果一个线程有很多缓存未命中,其他线程可以继续利用未使用的计算资源,这可能会导致整体执行速度更快,因为如果只执行一个线程,这些资源就会闲置。 此外,如果一个线程不能使用 CPU 的所有计算资源(因为指令依赖于彼此的结果),运行另一个线程可能会阻止这些资源变为空闲状态。
缺点
多个线程在共享缓存或转换后备缓冲区 (TLB) 等硬件资源时可能会相互干扰。 因此,即使只有一个线程在执行,单个线程的执行时间也不会得到改善,甚至可能会降低,这是由于较低的频率或额外的流水线级是适应线程切换硬件所必需的。
整体效率各不相同; 英特尔声称其超线程技术可将速度提高 30%,而仅执行非优化相关浮点运算循环的合成程序在并行运行时实际上可提高 xxx 的速度。 另一方面,使用 MMX 或 AltiVec 扩展并执行数据预取(作为一个好的视频编码器可能)的手动调整的汇编语言程序不会遭受缓存未命中或空闲计算资源的困扰。 因此,此类程序无法从硬件多线程中获益,而且确实会因为共享资源争用而导致性能下降。
从软件的角度来看,硬件对多线程的支持对软件来说更为明显,与多处理相比,需要对应用程序和操作系统进行更多更改。 用于支持多线程的硬件技术通常与用于计算机多任务处理的软件技术并行。 线程调度也是多线程中的一大难题。
多线程的类型
编辑交错/时间多线程
粗粒度多线程
最简单的多线程类型发生在一个线程运行直到它被通常会造成长时间延迟的事件阻塞为止。 这样的停顿可能是必须访问片外内存的高速缓存未命中,这可能需要数百个 CPU 周期才能返回数据。 线程处理器不会等待停顿解决,而是将执行切换到另一个准备好运行的线程。 只有当前一个线程的数据到达时,前一个线程才会被放回到就绪线程列表中。
例如:
- 周期 i:线程 A 发出指令 j。
- 周期 i + 1:线程 A 发出指令 j + 1。
- 第i + 2周期:线程A发出指令j + 2,这是一条在所有缓存中都未命中的加载指令。
- 周期 i + 3:调用线程调度程序,切换到线程 B。
- 周期 i + 4:线程 B 发出指令 k。
- 周期 i + 5:线程 B 发出指令 k + 1。
从概念上讲,它类似于实时操作系统中使用的协作式多任务处理,其中任务在需要等待某种类型的事件时自愿放弃执行时间。 这种类型的多线程称为块、协作或粗粒度多线程。
多线程硬件支持的目标是允许在阻塞线程和另一个线程之间快速切换。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195844/