直接映射的缓存如何实现空间局部性?

时间:2018-11-30 13:02:09

标签: caching memory-management

一个数组声明为floatA [2048]。每个数组元素的大小为4Bytes。此程序在具有 直接映射的数据高速缓存,大小为8KB,块(行)大小为16Bytes。 数组的哪些元素与数据缓存中的元素A [0]冲突?

最终A [0],A [512],A [1024],A [1536]映射到缓存块0

据我了解,当首次需要A [0]时,A [0],A [1],A [2],A [3](因为一个缓存块可以容纳4个元素)是带入缓存并分别放置在缓存块0、1、2和3中。

其他方法是只带A [0]并将其放置在缓存块0中。(此处不使用空间局部性)

在这种情况下的一般做法是什么?

1 个答案:

答案 0 :(得分:0)

所有四个元素A [3:0]存储在缓存块0中-因为这四个元素一起形成16B。根据硬件系统的设置方式,下一个16B然后存储在高速缓存块1中(决定哪个高速缓存行(16B连续数据粒度)映射到在设计硬件时将哪个高速缓存行映射到哪个集合中,并且基于该特定位)。地址。