转到他们的github页面并从其kde docs网站看到一些pdf手册后,我仍然感到困惑。假设测试代码中有这两行:
double a1 {asinh(1 / ep)}; // 5 instr.
double b1 {log((1 + sqrt(1 + ep*ep)) / ep)}; // 12 instr.
Run Code Online (Sandbox Code Playgroud)
在哪里ep可以预定义一些值。通过使用反汇编器运行调试器,然后耐心地敲击“下一条指令”并计数,可以在代码块中找到并完成注释。如果我将其设置为显示“指令提取”,则这些与Kacachegrind所说的一致。我想这应该是有道理的(我是C ++的初学者)。但是,如果我切换到“周期估算”,则会得到一些非常奇怪的读数。对于当前示例,它是115和122,但是其他看似相似的表达式,例如:
double Ap {1.0};
double ep {0.9};
Run Code Online (Sandbox Code Playgroud)
显示222和2(2同时获取两者的显示)!这是怎么回事?有人可以解释一下吗?
我想我在多次点击后就找到了答案,并逐渐习惯了Kcachegrind。总的“周期估算”使用以下公式:
CEst = Ir + 10 L1m + 100 LLm
Run Code Online (Sandbox Code Playgroud)
哪里
Ir = Instruction Fetch
L1m = L1 Miss Sum
Llm = Last-level Miss Sum
Run Code Online (Sandbox Code Playgroud)
因此,就我的情况而言,CEstshow 2和222,但2 Ir每个,第一个都有2指令获取且没有遗漏,而另一个有2指令获取,但每个都有两个遗漏,=>
2*Ir + 10*2*L1m + 100*2*Llm = 2 + 20 + 200 = 222
Run Code Online (Sandbox Code Playgroud)
这在我尝试过的所有代码中都是一致的。
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |