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