【问题标题】:Kcachegrind cycle estimationKcachegrind 周期估计
【发布时间】:2016-11-13 15:38:53
【问题描述】:

在访问他们的 github 页面并从他们的 kde 文档站点看到一些 pdf 手册后,我仍然感到困惑。假设测试代码中有这两行:

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

其中ep 是一些可以预定义的值。 cmets 是我的,在 Codeblocks 中,通过使用反汇编程序运行调试器,然后耐心地点击“下一条指令”并计数来完成。如果我将其设置为显示“指令获取”,这些与 Kacachegrind 所说的相对应。我想这应该是有道理的(我是 C++ 的初学者,顺便说一句)。但是如果我切换到“周期估计”,我会得到一些非常奇怪的读数。对于当前示例,它是 115122,但其他看似相似的表达式,例如:

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

显示2222(instr.fetch 显示2 两者)!这里发生了什么?谁能解释一下?

【问题讨论】:

    标签: c++ kcachegrind


    【解决方案1】:

    我想我在多次点击并更多地习惯了 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
    

    这在我尝试的所有代码中都是一致的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多