📜  延迟容限

📅  最后修改于: 2020-12-13 15:24:05             🧑  作者: Mango


微处理器的速度每十年增加了十倍之多,但是商品存储器(DRAM)的速度仅增加了一倍,即访问时间减少了一半。因此,就处理器时钟周期而言,内存访问的延迟在10年内增长了六倍。多处理器加剧了这个问题。

在基于总线的系统中,在处理器和内存之间建立高带宽总线往往会增加从内存中获取数据的等待时间。当内存物理分布时,网络和网络接口的延迟会添加到访问节点上本地内存的延迟中。

延迟通常随着计算机的大小而增长,因为更多的节点意味着相对于计算的更多通信,网络中用于常规通信的更多跳跃以及可能更多的争用。硬件设计的主要目标是减少数据访问的延迟,同时保持较高的可扩展带宽。

延迟容忍概述

通过查看机器中的资源及其使用方式,可以更好地理解如何处理延迟容限。从处理器的角度来看,从一个节点到另一个节点的通信体系结构可以看作是管道。流水线的各个阶段包括源和目标以及沿途的网络链路和交换机中的网络接口。根据架构如何管理通信,通信辅助,本地内存/缓存系统和主处理器中也有一些阶段。

基线通信结构中的利用率问题是处理器或通信体系结构在给定时间繁忙,而在通信管道中,一次传输仅一个阶段繁忙,因为正在传输的单个单词从源到目的地。延迟容限的目的是尽可能多地重叠使用这些资源。

显式消息传递中的延迟容限

消息传递中的实际数据传输通常是使用发送操作由发送方发起的。接收操作本身并不激励数据进行通信,而是将数据从传入缓冲区复制到应用程序地址空间中。接收方发起的通信是通过向作为数据源的进程发出请求消息来完成的。然后,该过程通过另一个发送将数据发送回去。

同步发送操作的通信等待时间等于将消息中的所有数据传递到目标所花费的时间,接收处理的时间以及返回确认的时间。同步接收操作的等待时间是其处理开销。其中包括将数据复制到应用程序中,以及在数据尚未到达时的额外延迟。我们希望在两端隐藏这些延迟,包括可能的开销。

共享地址空间中的延迟容限

基线通信是通过在共享地址空间中进行读写来实现的。为了方便起见,这称为读写通信。接收器启动的通信是通过读取操作完成的,读取操作导致来自另一个处理器的内存或缓存的数据被访问。如果没有共享数据的缓存,则可以通过写入远程内存中分配的数据来完成发送方发起的通信。

使用高速缓存一致性,写入的效果更加复杂:写入导致发送者或接收者发起的通信取决于高速缓存一致性协议。无论是接收方发起还是发送方发起,硬件支持的读写共享地址空间中的通信自然都是细粒度的,这使得容忍延迟非常重要。

在共享地址空间中阻止数据传输

在共享地址空间中,通过硬件或软件,可以在用户程序中显式完成数据的合并和块传输的启动,也可以由系统透明地完成。通过执行类似于用户程序中发送的命令来启动显式块传输。发送命令由通信助手进行解释,该通信助手以流水线方式将数据从源节点传输到目的地。在目的地,通信助手从网络接口拉入数据字并将其存储在指定的位置。

与发送-接收消息传递有两个主要区别,这两者都源于以下事实:发送过程可以直接指定将数据放置在目标位置的程序数据结构,因为这些位置在共享地址空间中。

在共享地址空间中处理过去的长时间等待事件

如果使存储器操作无阻塞,则处理器可以越过存储器操作而继续执行其他指令。对于写操作,如果将写操作放在写缓冲区中,则通常很容易实现,并且处理器在缓冲区负责将写操作发布到内存系统并根据需要跟踪其完成的过程中继续运行。区别在于,与写操作不同的是,通常在读操作之后不久就需要一条由读操作返回的值的指令。

共享地址空间中的预通信

预通信是一种已在商用微处理器中广泛采用的技术,其重要性在未来可能会增加。预取指令不能代替实际读取的数据项,并且预取指令本身必须是非阻塞的,以实现通过重叠隐藏延迟的目标。

在这种情况下,由于不缓存共享数据,因此将预取的数据带入称为预取缓冲区的特殊硬件结构中。当在下一次迭代中将字实际读入寄存器时,将从预取缓冲区的开头而不是从存储器读取字。如果隐藏的等待时间比计算单循环迭代的时间大得多,我们将提前预取几个迭代,并且一次可能在预取缓冲区中有几个字。

共享地址空间中的多线程

就隐藏不同类型的延迟而言,硬件支持的多线程可能是通用技术。与其他方法相比,它具有以下概念优势-

  • 它不需要特殊的软件分析或支持。

  • 由于它是动态调用的,因此它可以像处理可预见的情况一样处理不可预测的情况,例如缓存冲突等。

  • 与预取一样,它不会更改内存一致性模型,因为它不会对线程内的访问进行重新排序。

  • 尽管先前的技术旨在隐藏内存访问延迟,但是只要可以在运行时检测到该事件,多线程就可以很容易地隐藏任何长延迟事件的延迟。这也包括同步和指令等待时间。

由于等待时间与处理器速度相比越来越长,这种趋势将来可能会改变。同样,由于已经提供了可以扩展到多线程的方法的更复杂的微处理器,以及开发了将多线程与指令级并行性相结合的新的多线程技术,这种趋势在未来肯定会发生一些变化。