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