【问题标题】:When is it not possible to exploit spatial locality in cache?什么时候不能利用缓存中的空间局部性?
【发布时间】:2018-06-28 20:54:15
【问题描述】:

我们有一个处理器,它的指令在 8 字节操作数上运行,并且它的指令也使用 8 字节编码。我们使用的是 16 KB, 包含 1024 个集合的 4 路集合关联缓存。缓存总共有 4 * 1024 = 4096 个缓存行。这意味着,每个高速缓存行是 16KB=4096 = 4 字节,因此每个操作数和每条指令都需要存储在两个高速缓存行中,每次加载/存储操作和指令提取都需要对高速缓存进行 2 次访问。我们被告知缓存不能应用空间局部性,但为什么呢?在这种情况下,空间局部性意味着什么?

【问题讨论】:

    标签: caching memory-management cpu-architecture cpu-cache


    【解决方案1】:

    所以你的机器根本没有单字节加载/存储?

    如果每个加载都是一个完整的缓存行(或多个完整的缓存行),那么将一个行放入缓存中以进行一次加载将永远不会使空间附近的另一个负载受益。

    (除非您有硬件预取来检测顺序访问并开始获取相邻的缓存行...)

    【讨论】:

    • 不,机器没有单字节加载存储。空间局部性的定义不就是“近期会访问附近的数据”吗?
    • @jannè:是的。确切地。如果您的缓存行太小以至于加载一个值不会带来任何您实际上没有加载的附近值,那么代码中的空间局部性对您没有帮助。
    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 2018-07-24
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多