0

假设系统有一个 32 条目的 TLB,页面大小为 8KB。为了在几乎每次访问数组“数据”时实现 TLB 未命中,应该将 MAX 和 stride 设置为什么?

int value=0;
int data[MAX];
for (int j;j <1000; j++)
{
 for (int i =0, i<MAX; i+=stride)
 {
   value=value+data[i];
 }
}

这是一个练习期末考试,有答案,但我不明白。最终答案是:stride=2k MAX=33*stride

非常感谢任何能帮助我弄清楚如何在此类问题中找到 TLB 未命中数的完整答案。

4

1 回答 1

2
stride=2k

这部分解决方案是因为整数在相关系统上是 4 个字节。由于页面为 8KB,因此 2048 个整数的步长会将每个访问置于不同的页面上。

MAX=33*stride

由于步幅长度是页面大小,因此将数组长度设置为 33 页。假设 32 条目的 TLB 是全 LRU,这意味着在访问给定页面之间,数组中的所有其他 32 个页面都被访问,足以将页面从 TLB 中逐出并在再次轮到它时导致页面错误。

于 2013-12-11T08:43:42.500 回答