[英]Finding the appropriate stride for TLB misses in an array in a code snippet
假设系统具有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];
}
}
这是一个练习期末考试有答案,但我没有得到它。 最终答案是:stride = 2k MAX = 33 *步幅
任何完整的答案将帮助我弄清楚如何在这类问题中找到TLB未命中的数量,我们非常感谢。
stride=2k
解决方案的这一部分是因为ints在所讨论的系统上是4个字节。 由于页面为8KB,因此2048英寸的步幅将使每个访问位于不同的页面上。
MAX=33*stride
由于步幅长度是页面大小,因此设置33页的数组长度。 假设32条目TLB是完全LRU,这意味着在访问给定页面之间,访问阵列中的所有32个其他页面,足以从TLB中逐出页面并在轮到它时再次导致页面错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.