2013-10-27 26 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。你能用這個假設來解決嗎? –

相關問題