估算C函数的未命中率

问题描述

在这个问题上停留了一段时间,我想尝试解决时可能会遗漏一些东西。

假设:

  • 16路设置关联L1高速缓存(E = 16),块大小为32字节(B = 32)。
  • N非常大,因此缓存中无法容纳单个行或列。
  • sizeof(int)== 4
  • 变量i,k和sum存储在寄存器中。
  • 调用每个函数之前,缓存很冷。
int sum1(int A[N][N],int B[N][N])
{
  int i,k,sum = 0;
  for (i = 0; i < N; i++)
    for (k = 0; k < N; k++)
     sum += A[i][k] + B[k][i];
  return sum;
}

找到sum1的最接近漏检率。(答案为9/16)

我试图解决如下问题: A [0] [0],...,A [0] [7]映射到第一组中的第一条缓存行 A [0] [8],...,A [0] [15]映射到第二组中的第一条缓存行,依此类推,直到缓存中的最后一组,然后我们开始填充每组的第二条缓存行设置直到A完成,然后计算B的部分比较棘手,因为如果缓存中仍然有空间,我们可以填充它,或者可以开始替换每个集合中最旧的缓存块。 在未命中率方面,A每次映射一次都会丢失->一条高速缓存行的丢失N / 32 * N = 1/32,所有行的丢失(1/2/16)。 现在,由于我无法确切了解其操作方式,因此我一直试图解决B的遗漏。

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)