在代码片段中的数组中找到TLB未命中的适当步幅

时间:2013-12-10 22:56:01

标签: c arrays operating-system tlb stride

假设系统具有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未命中数量。

1 个答案:

答案 0 :(得分:2)

stride=2k

解决方案的这一部分是因为ints是有问题的系统上的4个字节。由于页面为8KB,因此每次访问的步幅为2048英寸将在不同的页面上进行。

MAX=33*stride

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