什么是搁置(Shelving)?
搁置(Shelving)是一种高级的指令发出模式,用于消除由于依赖关系导致的指令发出阻塞。搁置利用了专用的指令缓冲区,称为搁置缓冲区,位于每个执行单元 (EU) 的前面。搁置将依赖关系检查与指令发出解耦,并将检查推迟到调度阶段。
更准确地说,使用搁置,即使存在数据或控制依赖关系或执行单元繁忙,解码后的指令也会被放入搁置缓冲区。这消除了阻塞指令发出的瓶颈。
特定的资源约束可能会限制处理器在一个周期内发出的指令数量少于其指令发出率。存在两种资源约束,例如目标搁置缓冲区、重命名寄存器文件或 ROB 中缺少空闲条目。数据路径限制并限制在一个周期内可以传输到分配的搁置缓冲区的指令数量。在发生指令发出阻塞的情况下,使用搁置的处理器通常采用顺序发出、对齐发出等。

指令保存在搁置缓冲区中,直到依赖关系解决并且指令可以转发到执行单元。当某个执行单元空闲时,会检查相关的搁置缓冲区中是否有符合执行条件的指令。不受任何依赖关系约束的指令符合执行条件。根据使用的调度策略选择一个符合条件的指令进行执行,并将该指令转发到连接的执行单元。

使用搁置的处理器主要采用高级超标量指令发出策略。这意味着搁置通常与未解决的控制依赖关系的推测执行和寄存器重命名结合使用。
推测分支处理消除了由于未解决的控制依赖关系导致的执行阻塞,而重命名消除了由于错误的寄存器数据依赖关系(即由于 WAR 和 WAW 依赖关系)导致的发出阻塞。
然后,只有真正的数据依赖关系才能阻止保存在搁置缓冲区中的指令执行。因此,在指令调度期间,依赖关系检查减少为检查真正的数据依赖关系(RAW 依赖关系)。
这正是数据流操作原理。因此,具有搁置、推测分支处理和寄存器重命名的超标量处理器基于数据流执行指令。它涉及保持顺序一致性,这要求即使指令并行执行,也要保持执行的逻辑完整性。
搁置使处理更加分布式,因为调度窗口比发出窗口宽得多。因此,搁置经常与一种称为指令重排序的高级方法一起使用,以保持顺序一致性。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP