2016-07-11 40 views
3

在進入他們的github頁面並看到一些pdf手冊形成他們的kde文檔網站後,我仍然感到困惑。假設有兩行中的測試碼:Kcachegrind循環估計

double a1 {asinh(1/ep)};     // 5 instr. 
double b1 {log((1 + sqrt(1 + ep*ep))/ep)}; // 12 instr. 

ep哪裏是可以被預定義一些值。在Codeblocks中,通過運行調試器和反彙編器,然後耐心地點擊「下一條指令」並計數,這些評論是我的並完成的。這些與Kacachegrind的說法相符,如果我將它設置爲顯示「取指令」。我想這應該是有道理的(我是C++的初學者,順便說一句)。但如果我切換到「週期估計」,我會得到一些非常奇怪的讀數。對於當前的例子,它是115122,但其他,看似類似的表達,如:(INSTR獲取節目2兩個)

double Ap {1.0}; 
double ep {0.9}; 

顯示2222!這裏發生了什麼?有人可以解釋嗎?

回答

3

我想我找到答案後,多次點擊和習慣Kcachegrind更多。總「週期估計」使用這個公式:

CEst = Ir + 10 L1m + 100 LLm 

其中

Ir = Instruction Fetch 
L1m = L1 Miss Sum 
Llm = Last-level Miss Sum 

所以,對我而言,這裏CEst顯示2222,但2 Ir每次,第一個不得不2取指令和沒有錯過,而另一個有2指令提取,但也有兩個錯過每個,=>

2*Ir + 10*2*L1m + 100*2*Llm = 2 + 20 + 200 = 222 

這在我嘗試的所有代碼中都是一致的。