在访问他们的github页面并从他们的kde文档站点上看到一些pdf手册后,我仍然感到困惑。假设测试代码中有以下两行:
double a1 {asinh(1 / ep)}; // 5 instr.
double b1 {log((1 + sqrt(1 + ep*ep)) / ep)}; // 12 instr.其中ep是一些可以预定义的值。注释是我的,在代码块中,通过使用反汇编程序运行调试器,然后耐心地点击“下一条指令”并进行计数。如果我将Kacachegrind设置为显示“指令获取”,则这些内容与Kacachegrind所说的一致。我想这应该是有意义的(顺便说一句,我是C++的初学者)。但是如果我切换到“周期估计”,我会得到一些非常奇怪的读数。对于当前的示例,它是115和122,但其他看似相似的表达式,如:
double Ap {1.0};
double ep {0.9};显示222和2 (实例fetch显示两者的2 )!这是怎么回事?有人能解释一下吗?
发布于 2016-07-19 00:16:39
我想我在点击了很多次并且习惯了Kcachegrind之后,我找到了答案。总的“周期估计”使用这个公式:
CEst = Ir + 10 L1m + 100 LLm哪里
Ir = Instruction Fetch
L1m = L1 Miss Sum
Llm = Last-level Miss Sum因此,在我的示例中,CEst显示了2和222,但都是2 Ir,第一个有2指令获取,没有未命中,而另一个有2指令获取,但每个都有两个未命中,即=>
2*Ir + 10*2*L1m + 100*2*Llm = 2 + 20 + 200 = 222这在我尝试的所有代码中都是一致的。
https://stackoverflow.com/questions/38311201
复制相似问题