【发布时间】:2013-03-26 14:55:40
【问题描述】:
我知道命中率是缓存中找到的数据的百分比。但我不知道如何找到算法的命中。我在想,对于代码 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 ];
}
}
感谢任何帮助。谢谢
【问题讨论】:
-
我闻到了作业的味道。缓存命中率取决于实现。试试
valgrind
标签: algorithm caching memory computer-science hit