gpt4 book ai didi

c++ - Kcachegrind 循环估计

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:25 27 4
gpt4 key购买 nike

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

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

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

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

显示 2222(instr.fetch 显示 2 两者)!这是怎么回事?有人可以解释一下吗?

最佳答案

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

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

关于c++ - Kcachegrind 循环估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com