假设我有一个直接映射的缓存,每行有1024行,大小为16字节。 A,B和C也连续存储在存储器中。我运行以下for循环:
for (int i = 0; i < 1024; i++) {
C[i] = A[i] + B[i];
}
我很担心直接映射缓存在这种情况下是如何工作的。这是我的理由:
在循环的第一次迭代中,存在缓存未命中。高速缓存A [0] - A [15]和B [0] -B [15]。然后,对于循环的接下来的15次迭代,所有缓存请求都会导致命中。因此,对于1024次迭代,每次第16次迭代都是未命中的。因此,此循环中总共有64个缓存未命中。
我的推理是对的吗?而且,如果我的循环运行2000次迭代而不是1024次呢?由于我的信息有限,是否有可能在这种情况下估计缓存未命中数?如果我不必考虑需要覆盖缓存的情况,似乎问题会大大简化。