繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM