2016-07-11 9 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が所定することができるいくつかの値である:テストコードでこれらの二つの行があると仮定する。コメントは、コードブロックでは、逆アセンブラでデバッガを実行し、次に「次の命令」を数えて数えることによって、マイニングされ、実行されます。これらは、「命令フェッチ」を表示するように設定すると、Kacachegrindの言うことに対応します。私はそれが意味をなさないはずです(私はC++の初心者です、btw)。しかし、私が「サイクル見積もり」に切り替えると、私はいくつかの非常に奇妙な読みを得る。現在たとえば、それは115122だが、のような他の、一見同様の表現、:

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

は(INSTR両方のためのショーを2フェッチ。)2222を見ます!ここで何が起こるの?誰かが説明できますか?

答えて

3

私は多くのクリックの後に答えを見つけ、Kcachegrindにもっと慣れてきたと思う。総「サイクル推定は」この数式を使用しています。

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

だから、CEst2222を示したが、2 Ir各私の場合、のために、最初のものは2命令フェッチた

CEst = Ir + 10 L1m + 100 LLm 

ともう1つはミスがなく、もう1つは2命令をフェッチするだけでなく、それぞれ2つのミスがあった=>

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

これは私が試したすべてのコードで一貫しています。