在计算机体系结构中,多线程是中央处理单元 (CPU)(或多核处理器中的一个核心)在操作系统支持下同时提供多个执行线程的能力。延迟加密通过使其能够执行有用的功能来提高机器的使用率。
多线程是指程序或软件进程能够一次管理多个用户的使用,甚至管理同一用户的多个请求,而无需拥有在计算机内运行的多个程序副本。多线程是实现延迟隐藏的一种方式。
- 延迟隐藏方法的一般思想是让每个处理器尝试一些有用的工作,因为它等待远程操作请求得到满足。
- 延迟隐藏:在等待内存访问请求完成时,为每个处理器提供有用的工作。
- 延迟隐藏允许通信与计算完全重叠,从而提高效率和硬件利用率。
- 多线程可能是一种实用的延迟机制。
多线程是减少延迟的有用机制。多线程计算通常从一个顺序线程开始,然后是一些监督开销来设置(调度)各种独立线程,然后是各个线程的计算和通信(远程访问),最后是在启动下一个单元之前终止线程的同步步骤.
顺序线程:
在一个程序中,一个线程是一个单一的顺序控制流。关于线程的真正嗡嗡声不是关于单个顺序线程。相反,它指的是在单个程序中使用多个并发运行并执行不同任务的线程。
调度开销:
调度算法运行以确定运行哪个进程的次数称为调度开销。这是多道程序操作系统中的开销,因为我们有要运行的进程,但还必须决定要运行哪个进程。
远程内存访问:
计算中的远程直接内存访问 (RDMA) 是从一台计算机的内存到另一台计算机的内存的直接内存访问,而不涉及任何一台计算机的操作系统。这实现了高吞吐量、低延迟的网络,这在大规模并行计算机集群中尤其有益。
空闲时间:
理想时间是在没有中断或计划外问题的情况下完成给定任务所需的时间。在规划和估算时,许多基于时间的估算方法都使用这个时间尺度。
同步开销:
同步开销定义为一个任务等待另一个任务所花费的时间。任务可能会在一个明确的障碍处同步,它们都完成了一个时间步。等待其他任务所花费的时间浪费了该任务正在运行的核心。这段等待时间称为同步开销。
应该注意的是,多线程的使用不仅限于并行处理环境,还可以在单处理器上提供好处。为了提高性能,具有多个要执行的独立线程的单处理器可以在每次缓存未命中、每次加载、每条指令之后或每个固定大小的指令块之后在它们之间切换。处理器可能需要多个寄存器集(以减少上下文切换开销)和更大的高速缓存内存(为多个线程保存最近引用的数据),但好处可能超过成本。平田等人。 [Hira92] 声称在具有九个功能单元和两个、四个或八个独立线程的处理器中,加速分别为 2.0、3.7 和 5.8。
用于延迟隐藏的多线程:示例
- 在代码中,有这个函数的 main(primary) 实例访问一对向量元素并等待它们。
- 同时,该函数的第二个实例可以在下一个循环中访问另外两个向量元素,依此类推。
- 在 l 个单位的时间之后,其中 l 是内存系统的延迟,主函数实例从内存中获取请求的数据,并可能执行指定的计算。
- 在下一个循环中,下一个函数实例的信息项到达,依此类推。在这种方式下,在每个时钟周期中,我们都能够执行计算。
- 前一个示例中的执行计划基于两个假设:内存系统能够为多个未完成的请求提供服务,因此处理器能够在每个周期切换线程。
- 它还要求程序在线程类型中拥有特定的并发规范。
- 像 HEP 和 Tera 这样的机器依赖于多线程处理器,它们将在每个循环中切换执行上下文。因此,他们已准备好有效地隐藏延迟。
多线程的优点
- 增加吞吐量。单个进程可以处理大量并发计算操作和 I/O 请求。
- 以完全对称的方式同时使用多个处理器进行计算和 I/O。
- 出色的应用程序响应能力。如果请求可以在其自己的线程上启动,应用程序不会冻结或显示“沙漏”。
- 改进了服务器响应能力。大型或复杂的请求或缓慢的客户端不会阻止其他服务请求
- 最小化系统资源使用。线程对系统资源的影响最小。
- 与传统流程相比,线程需要更少的开销来创建、维护和管理。
多线程的缺点
多线程也有一些共同的缺点
- 难以理解的调试和测试过程。
- 结果有时是不可预测的。
- 有开销的上下文切换。
- 发生死锁的可能性更大。
- 编写程序的难度增加了。
- 总的来说,复杂性有所增加。
- 共享资源同步(对象、数据)
- 潜在的死锁“饥饿”:如果设计有缺陷,某些线程可能无法提供服务。
- 线程构建和同步会消耗大量 CPU/内存。
请参阅多线程模型,多线程的好处,以及多任务,多线程和多之间的区别。