ARM CPU上的逐出缓冲区和合并存储缓冲区有什么区别?

时间:2014-05-13 15:19:35

标签: arm cpu-architecture cpu-cache cortex-a

我使用带有两个L1缓存的Cortex A9 CPU:一个用于数据,另一个用于指令。缓存策略可以是“回写”或“直写”。 Cortex-A9 Technical Reference Manual part "7.1. About the L1 memory system"表示数据L1缓存具有:

  • 一个32字节驱逐缓冲区
  • 一个4项,64位合并存储缓冲区

我不明白这两个缓冲区之间的区别。在我看来:

  • “逐出缓冲区”用于在将被驱逐的行写入RAM之前保存它们
  • “合并存储缓冲区”用于在将数据写入RAM之前保存数据

我猜“驱逐缓冲区”仅用于回写策略,而“合并存储缓冲区”仅用于直写策略,但我不确定该假设。

谢谢,对不起我的基本英语。

2 个答案:

答案 0 :(得分:2)

回写直写的缓存策略仅适用于可缓存的访问。对于device or strongly ordered,必须在不进入缓存的情况下写入数据。对于设备访问,合并存储缓冲区可用于在对设备的写入完成时临时保存数据。 CPU可以去做其他事情。

根据Wikipedia's write buffer直写缓存不需要驱逐缓冲区。 合并存储缓冲区实际上不是缓存功能,可以看作是一个完全不同的实体。但它与内存访问优化(如缓存)有关,并且位于相同的功能块中。

答案 1 :(得分:1)

合并存储缓冲区位于CPU和缓存之间;它的目标是合并相邻的写入。例如,如果您执行一系列相邻的8位写操作,那么这些写操作将首先在合并缓冲区中累积,然后以更大的块写入缓存并减少缓存事务。

驱逐缓冲区位于缓存和内存之间(或者可能是下一个缓存级别);它的目标只是成为缓存线被逐出缓存的临时存储器,这样缓存就可以重用现在未分配的线路而不必等待确认告知整条线路已写入内存。