我知道命中率是缓存中找到的数据的百分比。但我不知道如何找到算法的命中。我在想,对于代码 1,我将有 11 个块,每个块有 4 个元素,对于代码 2,我将有 4 个块,每个块有 11 个元素,每次我看到 4 个元素丢失。不确定这是否有意义。欢迎任何建议
假设一个 11 行 4 列的二维数组 A,像这样存储在内存中[0][0], [0][1], [0][2], [0][3], [1][0], [1][1], …[10][2], [10][3]
还假设有 10 个内存块的完全关联的单级缓存,每个内存块保存 4 个字节,以及一个 FIFO 替换策略。
每一行都完全适合一个缓存块,不幸的是,整个阵列无法放入缓存中。缓存行太小了...
现在给出以下 2 个代码,1-我如何计算命中率 2-假设缓存访问时间为 5ns,内存访问时间为 70ns,并且假设对内存和缓存的访问重叠,我如何计算每个代码的 EAT ?
代码 1:
for (int row = 0; row < 11; row ++)
{
for (int column = 0; column < 4; column ++)
{
myByte = A [ row, column ];
}
}
代码 2:
for (int column = 0; column < 4; column ++)
{
for (int row = 0; row < 11; row ++)
{
myByte = A [ row, column ];
}
}
任何帮助表示赞赏。谢谢