假设系统具有32条TLB,页面大小为8KB。 MAX和stride应该设置为什么才能在几乎每次访问数组“数据”时实现TLB未命中?
int value=0;
int data[MAX];
for (int j;j <1000; j++)
{
for (int i =0, i<MAX; i+=stride)
{
value=value+data[i];
}
}
这是一个练习期末考试有答案,但我不明白。最终答案是: 跨度= 2K MAX = 33 *步幅
非常感谢任何完整的答案,这些答案将帮助我弄清楚如何在这类问题中找到TLB未命中数量。
答案 0 :(得分:2)
stride=2k
解决方案的这一部分是因为ints是有问题的系统上的4个字节。由于页面为8KB,因此每次访问的步幅为2048英寸将在不同的页面上进行。
MAX=33*stride
由于步幅长度是页面大小,因此设置的页面长度为33页。假设32条目TLB是完全LRU,这意味着在访问给定页面之间,访问阵列中的所有32个其他页面,足以从TLB中逐出页面并在轮到它时再次导致页面错误。