gpt4 book ai didi

cpu-architecture - 存储队列和存储缓冲区有什么区别?

转载 作者:行者123 更新时间:2023-12-04 08:31:24 27 4
gpt4 key购买 nike

我正在阅读许多论文,它们要么交替使用存储缓冲区和存储队列,要么它们与不同的结构有关,我就是无法跟进。这就是我认为的商店队列:

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

  • 我不确定存储缓冲区是什么,但我认为它只是一些缓冲区空间,用于保存已停用的存储指令的数据等待写入内存(同样,L1)。

    现在,这就是我感到困惑的原因。在 this论文指出,“我们提出了可扩展存储缓冲区 [SSB],它将私有(private)/推测值直接放入 L1 缓存,从而消除了传统存储缓冲区的不可扩展关联搜索。”我认为他们正在谈论的不可扩展的关联搜索传统结构就是我所知道的商店队列,因为他们也说

    SSB eliminates the non-scalable associative search of conventional store buffers by forwarding processor-visible/speculative values to loads directly from the L1 cache.



    正如我上面提到的,据我所知,数据转发到负载是通过存储队列完成的。在第一页的脚注中,还指出

    We use "store queue" to refer to storage that holds stores’ values prior to retirement and "store buffer" to refer to storage containing retired store values prior to their release to memory.



    这与我上面解释的一致,但是它与第一个引号中的“存储缓冲区”冲突。脚注对应于 references 之一在论文中。在那个引用文献中,他们说

    a store buffer is a mechanism that exists in many current processors to accomplish one or more of the following: store access ordering, latency hiding and data forwarding.



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

    non-blocking caches and buffering structures such as write buffers, store buffers, store queues, and load queues are typically employed.



    所以,他们分别提到了存储缓冲区和存储队列,但存储队列稍后不再提及。他们说

    the store buffer maintains the ordering of the stores and allows stores to be performed only after all previous instructions have been completed



    他们的存储缓冲区模型与 Mike Johnson 的模型相同。在约翰逊的书(超标量微处理器设计)中,存储首先以获取顺序进入存储预留站。从那里,它们被发送到地址单元,并从地址单元将它们连同相应的数据一起写入“存储缓冲区”。负载转发是通过这个存储缓冲区处理的。再一次,我认为这种结构称为存储队列。在引用文献#2 中,作者还提到

    The Alpha 21264 microprocessor has a 32-entry speculative store buffer where a store remains until it is retired."



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

    Stores first transfer their data across the data buses into the speculative store buffer. Store data remains in the speculative store buffer until the stores retire. Once they retire, the data is written into the data cache on idle cache cycles.



    还,

    The internal memory system maintains a 32-entry load queue (LDQ) and a 32-entry store queue (STQ) that manages the references while they are in-flight. [...] Stores exit the STQ in fetch order after they retire and dump into the data cache. [...] The STQ CAM logic controls the speculative data buffer. It enables the bypass of speculative store data to loads when a younger load issues after an older store.



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

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

    最佳答案

    This is in line with what I explained above, but then it conflicts with the 'store buffer' in the first quote.



    确实没有冲突,您的理解似乎与他们在论文中使用这些术语的方式一致。让我们仔细阅读作者所说的话。

    SSB eliminates the non-scalable associative search of conventional store buffers...



    存储缓冲区保存已停用但尚未写入 L1 缓存的存储。这必然意味着任何后来发布的加载相对于存储缓冲区中的任何存储在程序顺序上都更年轻。所以要检查加载的目标缓存行的最新值是否还在存储缓冲区中,只需通过加载地址搜索存储缓冲区即可。可以有零个与负载匹配的存储,也可以只有一个存储。也就是说,匹配的商店不能超过一个。在存储缓冲区中,出于转发的目的,您只需要跟踪最后存储到缓存行(如果有)并仅与该缓存行进行比较。这与我将在稍后讨论的存储队列形成对比。

    ...by forwarding processor-visible/speculative values to loads directly from the L1 cache.



    在作者提出的架构中,存储缓冲区和 L1 缓存不在相干域中。 L2 是相干域中的第一个结构。因此,L1 包含私有(private)值,作者使用它来转发数据。

    We use "store queue" to refer to storage that holds stores’ values prior to retirement and "store buffer" to refer to storage containing retired store values prior to their release to memory.



    由于存储队列中保存着尚未退役的存储,因此在将负载与存储队列进行比较时,需要检查队列中每个存储的地址和年龄。然后从比针对同一位置的负载更旧的最年轻存储转发该值。

    您引用的论文的目标是找到一种有效的方法来增加存储缓冲区的容量。它只是不对存储队列进行任何更改,因为这不在工作范围内。然而,还有一个 paper而是针对存储队列。

    a store buffer is a mechanism that exists in many current processors to accomplish one or more of the following: store access ordering, latency hiding and data forwarding.



    这些特性适用于存储缓冲区和存储队列。使用存储缓冲区(和队列)是提供这些功能的最常见方式,但还有其他方式。

    不过,一般来说,这些术语可能被不同的作者或供应商用来指代不同的事物。例如,在 Intel 手册中,只使用了存储缓冲区术语,它同时包含未退休和退休但尚未提交的存储(显然,实现比仅缓冲区复杂得多)。事实上,可以为两种存储都使用一个缓冲区,并使用一个标志来区分它们。在 AMD 手册中,术语存储缓冲区、存储队列和写入缓冲区可互换使用,指代与英特尔所谓的存储缓冲区相同的东西。尽管术语写缓冲区在其他上下文中确实具有特定含义。如果您阅读的文档使用了这些术语中的任何一个而没有对其进行定义,那么您必须从上下文中弄清楚它们是如何使用的。在您引用的那篇特定论文中,这两个术语已被精确定义。无论如何,我知道很容易混淆,因为我去过那里。

    关于cpu-architecture - 存储队列和存储缓冲区有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975540/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com