2013-10-27 29 views
1

如何计算TLB的数量,如下面的代码片段假定页面大小码错过为1KB:如何查找代码片段中的TLB未命中数量?

int i; 
int p[1024]; 
for (i=0; i<1024; i++) 
    p[i]=0; 

我想知道的一般规则,能够计算数量的TLB中未命中几乎每个给定的代码片段都知道#TLB错过了这个代码片段。

回答

2

不能有任何直接的答案。从一个处理器到另一个处理器的答案将大不相同。首先,TLB的大小(条目数量)不相同。其次,处理器倾向于使用算法来保留更有价值的条目(因为他们相信它们)并丢弃其他条目。这些算法从未发布。

除此之外,TLB的某些部分将用于读取指令,操作系统将使用某些内容。这意味着你无法知道确切的结果。

维基百科提供了以下信息:

  • 尺寸:12 - 4096项;
  • 命中时间:0.5 - 1个时钟周期;
  • 惩罚小姐:10 - 100个时钟周期;
  • 错过率:0.01 - 1%。

在你的例子中,一个由1024个4字节整数组成的数组,你将需要5个页面,因为你的数组很可能不会被页面边界对齐。一旦循环访问,每个页面将在TLB中获得它的位置。这个初始位置可以被视为TLB未命中吗?据我所知,没有确切的答案。有些人可能回答是,有些人会回答不。我会回答不。

当TLB的大小不足以存储算法所需的所有页面时,这无疑被称为TLB未命中。在你的情况下,如果一个TLB只有2个输入,那么会有3个输入。

+0

想象一下sizeof(int)是4Byte。你能用这个假设来解决吗? –

相关问题