小编nlo*_*ogn的帖子

存储队列和存储缓冲区之间有什么区别?

我正在阅读一些论文,他们要么可以互换使用存储缓冲区和存储队列,要么与不同的结构有关,而我无法跟进.这就是我认为的商店队列:

  • 它是一个可关联搜索的FIFO队列,以获取顺序保存有关存储指令的信息.
  • 它保留了商店地址和数据.
  • 它保存商店指令的数据,直到指令变为非投机性,即它们达到退休阶段.存储指令的数据仅在到达退出阶段时才从存储队列发送到存储器(在这种情况下为L1高速缓存).这很重要,因为我们不希望将推测性商店数据写入内存,因为它会混乱有序内存状态,并且在错误预测的情况下我们无法修复内存状态.
  • 在错误预测时,删除与错误预测指令之后获取的存储指令相对应的存储队列中的信息.
  • 加载指令向L1高速缓存和存储队列发送读取请求.如果在存储队列中找到具有相同地址的数据,则将其转发到加载指令.否则,使用从L1获取的数据.

我不确定存储缓冲区是什么,但我认为只是一些缓冲区空间来保持退役存储指令的数据等待写入内存(同样,L1).

现在,这就是为什么我感到困惑.在论文中,指出"我们提出可扩展存储缓冲器[SSB],这使私人/推测值直接进入L1高速缓存,从而避免不可缩放缔搜索常规存储缓冲器的".我认为他们所讨论的不可扩展的关联式可搜索传统结构就是我所知道的商店队列,因为他们也说

SSB通过将处理器可见/推测值直接转发到L1高速缓存的加载,消除了传统存储缓冲区的不可扩展的关联搜索.

正如我上面提到的,据我所知,数据转发到加载是通过存储队列完成的.在第一页的脚注中,也有人说

我们使用"存储队列"来指代在退役之前保存商店值的存储和"存储缓冲区"以在存储到存储器之前引用包含已退休存储值的存储.

这符合我上面解释的内容,但它与第一​​个引用中的"存储缓冲区"冲突.脚注对应于论文中的参考文献之一.他们说,在那篇参考文献中

存储缓冲区是存在于许多当前处理器中以实现以下一个或多个的机制:存储访问顺序,延迟隐藏和数据转发.

我再次认为实现这些机制的机制称为存储队列.他们后来在同一篇论文中说

通常使用非阻塞高速缓存和缓冲结构,例如写缓冲区,存储缓冲区,存储队列和加载队列.

因此,他们分别提到存储缓冲区和存储队列,但稍后不再提及存储队列.他们说

存储缓冲区维护存储的顺序,并且只有在完成所有先前的指令之后才允许存储

他们的商店缓冲模型与Mike Johnson的模型相同.在约翰逊的书(超标量微处理器设计)中,商店首先以获取顺序进入商店预订站.从那里,它们被发送到地址单元,并从地址单元被发送到"存储缓冲区"及其相应的数据.通过此存储缓冲区处理加载转发.我再一次认为这个结构被称为商店队列.在参考文献#2中,作者也提到了这一点

Alpha 21264微处理器有一个32项的推测商店缓冲区,商店一直存在,直到它退役."

我看了一篇关于Alpha 21264的论文,其中指出了这一点

商店首先将数据通过数据总线传输到推测性存储缓冲区.商店数据保留在推测商店缓冲区中,直到商店退休.退出后,数据将在空闲缓存周期内写入数据缓存.

也,

内部存储器系统维护一个32项加载队列(LDQ)和一个32项存储队列(STQ),用于管理它们在飞行中的引用.[...] Stores在退出并转储到数据缓存后以获取顺序退出STQ.[...] STQ CAM逻辑控制推测数据缓冲区.当较旧的商店之后发生较年轻的负载时,它可以绕过推测商店数据加载.

因此,听起来像在Alpha 21264中有一个存储队列,它以获取顺序保存有关存储指令的一些信息,但它不保留存储指令的数据.存储指令的数据保存在存储缓冲区中.

所以,在所有这些之后,我不确定存储缓冲区是什么.它只是存储队列的辅助结构,还是存储等待写入L1的数据的完全不同的结构.或者是别的什么?当我们说"存储缓冲区"时,我觉得有些作者的意思是"存储队列".有任何想法吗?

cpu-architecture

6
推荐指数
2
解决办法
4068
查看次数

在 Android Studio 中查找 100 多个结果

我注意到 Android Studio 3.0.1 在“在路径中查找”中没有显示超过 100 个结果。我发现了thisthis,两者都提到了更改与ide.usages.page.size注册表选项关联的值,但是我在安装的注册表中没有看到这样的选项。知道发生了什么或我如何更改该数字?

intellij-idea android-studio

6
推荐指数
1
解决办法
922
查看次数