【问题标题】:How to count # of cache misses in theory for a matrix in memory exceeding cache size?理论上如何计算内存中超过缓存大小的矩阵的缓存未命中数?
【发布时间】:2021-01-24 15:07:03
【问题描述】:

我目前正在考虑以行优先顺序存储在主存储器中的 64 位整数元素的 n x n 矩阵 M。我有一个 16KB 的 L1 数据 缓存,分成 64B 块(无 L2 或 L3)。我的代码旨在通过以行优先顺序或列优先顺序遍历矩阵,一次打印出数组的每个元素。

n = 16(即 16 x 16 矩阵)的情况下,我使用行优先顺序和列优先顺序计算了 0 次缓存未命中,因为矩阵 M 完全适合16KB 缓存(它永远不需要跳转到主内存来获取元素)。我将如何处理 n = 256 (256 x 256 64 位整数矩阵)的情况;即当 M 不完全适合缓存时?我是否将所有不适合的整数都算作未命中,还是可以以某种方式利用空间局部性?假设缓存最初是空的。

【问题讨论】:

  • 我没有看到标题中的“文件”部分? “缓存”是一个通用概念——你的操作系统通常有一个内存缓存用于磁盘上的文件,但这不是一个 16 kB 的缓存分成 64B 块。
  • @MSalters 道歉 - 我已更改“文件”以免误导(希望现在更好?)。此外,我们应该假设缓存最初是空的——这会改变 n = 16 的答案(即导致非零未命中)吗?假设一个空的 catch 意味着我对于我带入缓存的每个块都会有一个未命中,那不是 32 个未命中吗?
  • 如果缓存最初是空的,那么第一次访问肯定是缓存未命中。因此答案不能为零。还有多少,你得自己想办法。提示:不要只计算缓存未命中,还要计算缓存驱逐。
  • @MSalters 非常感谢!想我把它整理好了:)

标签: matrix cpu-cache localityofreference


【解决方案1】:

“0 次缓存未命中”似乎假设您开始时 M 已经在缓存中。这已经有点可疑了,不过没关系。

对于 256x256 的情况,您需要模拟缓存的行为方式。您必须有缓存未命中才能引入丢失的条目。每个缓存未命中不仅会带来请求的 int,还会带来 7 个相邻的 int。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2015-05-14
    • 2015-07-09
    • 2019-07-28
    相关资源
    最近更新 更多