写入分配/获取写入缓存策略

时间:2016-09-04 13:44:39

标签: caching computer-science cpu-architecture cpu-cache

我无法找到解释政策如何详细运作的来源。写入策略的组合在Jouppi's Paper中针对感兴趣的人进行了解释。这就是我理解它的方式。

  1. 写请求从cpu发送到缓存。
  2. 请求导致缓存未命中。
  3. 在缓存中为此请求分配缓存块。(Write-Allocate)
  4. 写入请求块从较低内存获取到分配的高速缓存块。(Fetch-on-Write)
  5. 现在我们可以通过提取缓存块写入已分配和更新的内容。
  6. 问题是在步骤4和步骤5之间发生的事情。(可以说Cache是​​使用Miss Status Handling Registers的非阻塞缓存。)

    在写入命中之前,CPU是否必须在缓存上重试写入请求? (在将块提取到分配的缓存块之后)

    如果没有,那么写入请求数据在哪里

    编辑:我想我在Implementation of Write Allocate in the K86™ Processors找到了答案。它直接写入分配的缓存块,稍后会与读取请求合并。

1 个答案:

答案 0 :(得分:1)

  

它直接写入分配的缓存块,稍后会与读取请求合并。

不,这不是AMD的pdf所说的。他们说存储数据与来自内存的刚刚获取的数据合并,然后然后存储到L1缓存的数据数组中。

使用缓存行粒度缓存跟踪有效性。它没有办法存储"字节3到6有效的事实;当数据从内存到达时保留它们#34;这种逻辑太大了,无法在缓存数组的每一行复制。

另请注意,您找到的pdf描述了AMD的K6微体系结构的一些特定行为,这些行为仅为单核,有些模型只有一级缓存,因此没有缓存一致性协议必要。他们确实使用L1和L2缓存之间的MESI来描述K6-III(模型9)。

写入缓存的CPU必须保留数据,直到缓存准备接受它为止。但是,这不是重试直到成功的过程。它更像是当存储硬件准备好接受该存储时通知存储硬件(即它具有该行活动,并且如果缓存与使用{{3的其他缓存一致)则处于修改状态}})。

在真实的CPU中,MESI protocol(即使没有完全无序的推测执行)。这被称为miss miss miss。 CPU高速缓存连接需要可以并行支持的每个未完成未命中的缓冲区,以保存存储数据。例如一个核心可能有8个缓冲区,并支持8个未完成的加载或存储未命中。在第8个存储器操作中的一个可用之前,第9个存储器操作才能开始发生。在此之前,数据必须保留在CPU的存储队列中。

这些缓冲区可能在加载和存储之间共享,也可能有专用的存储缓冲区。 OP报告在商店缓冲区上搜索发现了许多相关的东西;一个例子是multiple outstanding misses can be in flight at once

L1缓存实际上是现代高性能设计中CPU核心的一部分。它与内存顺序逻辑紧密集成,需要能够有效地支持lock inc [mem]等原子操作以及许多其他复杂功能(如内存重新排序)。例如,请参阅this part of Wikipedia's MESI article

其他一些术语:

  • 存储缓冲区
  • 存储队列
  • 内存顺序缓冲区
  • 缓存写入端口/缓存读取端口/缓存端口
  • 全球可见

远程相关:https://en.wikipedia.org/wiki/Memory_disambiguation#Avoiding_WAR_and_WAW_dependencies调查英特尔IvyBridge的L3缓存的自适应替换策略,使其在扫描大型阵列时更能抵御驱逐有价值的数据。