如果页面大小为1KB,我如何计算代码中的TLB未命中数,如下面的代码片段:
int i;
int p[1024];
for (i=0; i<1024; i++)
p[i]=0;
我很有兴趣知道能够计算几乎每个给定代码片段中TLB未命中数的一般规则,除了知道#TLB错过了这个。
答案 0 :(得分:3)
没有任何直接的答案。从一个处理器到另一个处理器,答案将大不相同。首先,TLB的大小(条目数)不一样。其次,处理器倾向于使用算法来保留更多有价值的条目(因为它们被认为是)并丢弃其他条目。这些算法从未发布过。
除此之外,TLB的某些部分将用于读取指令,操作系统将使用某些内容。这意味着你无法知道确切的结果。
维基百科提供以下信息:
在您的示例中,1024个4字节整数的数组将需要5个页面,因为很可能您的数组不是页面边界对齐的。一旦循环访问,每个页面将在TLB中占据一席之地。这个初始位置可以被视为TLB未命中吗?据我所知,没有明确的答案。有些人可能会回答是,有些人会回答否定。我会回答否。
当TLB的大小不足以存储算法所需的所有页面时,这无疑被称为TLB未命中。在你的情况下,如果TLB只有2个条目,那么将有3个未命中。