问题标签 [callgrind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
628 浏览

c++ - 什么是 __printf_fp() 以及何时调用?

在使用 callgrind 分析我的代码后,我看到 __printf_fp() 是 self 列中具有更多价值的函数。这个函数是什么,什么时候调用?

谢谢!

0 投票
0 回答
108 浏览

c++ - Callgrind对代码性能有什么影响?

我正在使用 Callgrind 来查看调用特定函数的次数。但是,我也对执行时间感兴趣。

我知道程序在 Callgrind 上运行时需要更长的时间,因为它必须获取信息。然而,令我惊讶的是时间的变化。就我而言,我在 2D 和 3D 网格上运行两个不同版本的快速行进方法(FMM 和简化 FMM)。结果如下:

在此处输入图像描述

在 2D 中,FMM/SFMM 的比率根本没有保留,但至少它总是 >1(FMM 总是比 SFMM 花费更长的时间)。然而,在 3D 中 Callgrind 的效果完全相反,时代完全改变了:SFMM 需要更短的 callgrind 但在常规执行中需要更长的时间。

我正在使用的编译(-Ofast,-fno-finite-math-only)一直是相同的,并且相同的二进制文件在 callgrind 和常规运行的 ./bin-name 中运行

时间测量函数来自 std::chrono。

因此,问题是:由于我在所有情况下都使用相同的二进制文件,相同的二进制文件怎么可能表现得如此不同?在这种情况下,我获得的其他数据(函数调用、时间成本百分比等)是否可靠?使用常规执行命令运行二进制文件时,预期会出现类似 Callgrind 的结果。

编辑:在实现中,主要变化是在 FMM 中我使用的是 Boost Fibonacci 堆,而在 SFMM 中我使用的是带有 Boost 优先级队列的小修改。

谢谢!

0 投票
1 回答
3543 浏览

c++ - kcachegrind:没有可用于以下功能的源

我正在尝试使用 Ubuntu 12.04 查看带注释的源代码$ valgrind --tool=callgrind ./myProgram$ kcachegrind我在$ qcachegrind使用 Mac OSX 时遇到了同样的问题)。

C++ 脚本myProgram.cpp调用.hpp文件中的函数(通过#include "../include/myHeader.hpp"等)。我这样编译myProgram.cpp

我不关心查看该第三方库的注释源。

我想看到的是myHeader.hppin和 for 函数的注释源myProgram.cpp

相反,我看到了 kcachegrind 的 Flat Profile 窗口,其中列出了所有被调用的函数,包括其中的函数myHeader.hpp-这很棒。现在,kcachegrind 将函数的位置报告myHeader.hpp为 from myProgram-这很奇怪。最后,当我从 Flat Profile 窗口中选择任何功能并请求查看源代码时,我会遇到:

我试过的:

  • myHeader.hpp使用 kcachegrind 的 GUI将目录添加到注释列表中。

  • 使用 -O0 编译以删除编译器优化

0 投票
1 回答
9808 浏览

c++ - 如何解释 kcachegrind 的结果

谁能告诉我如何对 kcachegrind 的结果感兴趣。

我有两个版本的代码(v1、v2)都在调试模式下编译。我通过 valgrind 使用选项运行它们:

valgrind --tool=callgrind -v ....

这样生成的输出文件在 kcachegrind 中打开。现在我已经发现代码的 v2 版本比第一个版本 v1 运行得更快。但是我如何从 kcachegrind 的调用图中得到结果。

在 kcachegrindAll Callers选项卡中,我有以下列Incl. , Distance, Called, Caller

IIUC,Called并且caller是程序中调用“调用者”的次数。但我不知道其他人。

另一件事是选择特定功能,然后“呼叫者”选项卡时显示了更多信息。Ir, Ir per call, count, caller 并在类型选项卡中:`EventType,Incl。自我,简短,公式。

我在这里没有任何想法。

到目前为止,我已经阅读了这些问题:

KCachegrind 解释混乱 对分析结果感到困惑

0 投票
1 回答
280 浏览

c++ - 对单个函数进行基准测试

如何对函数进行基准测试?查看 callgrind 的结果,我发现我的程序在pow. 由于我不需要完整的工作精度,我认为我可以创建一个查找表并在表中的点之间使用线性插值。为了能够评估查找表方法,我需要测量时间。所以我这样做了:

运行此程序时,每次迭代的输出约为 2.25 个周期。这似乎很低,因为执行pow似乎是(它callgrind给了我__ieee754_pow)。

在 x86-64 上为 GNU/Linux 编译时,汇编中的基准循环如下所示:

至少pow被称为。我可以相信输出还是有一些消除事物的黑魔法。

0 投票
1 回答
1427 浏览

c++ - Callgrind 在 O1 或 O3 上进行性能分析?

我需要分析我的 C++ 代码,valgrind --tool=callgrind这是一个非常出色的工具。但是,我想知道是否应该使用-g -pg -O1or -g -pg -O3(GCC 4.4.7) 来分析我的代码?后者更准确地描述了我的程序性能,但我担心这-O3会混淆分析器并混淆哪些源函数是实际的瓶颈。也许我只是害怕老太太的故事,但我想我应该在进行可能的几个小时测试之前先确定一下。

0 投票
1 回答
1102 浏览

c++ - Callgrind: How to use Callgrind tool to evaluate function speed

I am interested in testing speed of some function calls from the code written in C/C++. I searched and I was directed to use Valgrind platform with Callgrind tool.

I have briefly read the manual, but I am still wondering how I can utilize the functionality of the tool to evaluate the time of my function runtime speed.

I was wondering if I could get some pointers how I can achieve my goal.

Any help would be appreciated.

0 投票
1 回答
1378 浏览

c++ - C++ 分析:时钟周期计数

valgrind --tool=callgrind用来分析我的 C++ 程序的一个关键部分。

该部分本身的执行时间不到一微秒,因此我正在分析该部分上的大量循环。

我注意到指令的执行时间是 0.13% 的倍数(占程序总执行时间的百分比)。所以我只看到 0.13、0.26、0.52 等等。

我的问题是,我应该假设这个原子量测量 CPU 周期吗?见照片。(callgrind输出以图形方式显示kcachegrind。)

在此处输入图像描述

编辑:顺便说一下,看看机器代码,我看到mov需要 0.13 所以这可能确实是一个时钟周期。

0 投票
1 回答
455 浏览

r - 在简单的 R 文件上运行 Callgrind

我想使用 Callgrind 来查找一些复杂的 Rcpp 代码中的瓶颈。由于我无法让它工作,我决定改为编写一个简单的 R 文件,以确保它正在做它应该做的事情。

但是,我仍然无法让它工作。

我的简单功能是:

然后我输入:

这似乎运行良好,并产生 callgrind.out.XYZ,正如文档所说的那样。

然后我输入:

并获得以下信息:

这与我使用更复杂的代码时遇到的错误完全相同,因此除了函数之外的某些东西有问题。

请问有人知道我做错了什么吗?谢谢。

0 投票
1 回答
211 浏览

profiling - c++ - 分析以获取被调用函数的概述

我想分析我的程序不是出于性能原因,而是为了查看程序的逻辑。如果函数 A 调用 B 然后 C 和 D 它会是这样的:

目前我使用 valgrind/callgrind。它非常有用,但不能完全满足我的需求。我们看不到所有不同的调用堆栈,也看不到函数的调用顺序。例如,如果我们也有 F->G(但在上下文中没有堆栈 A->C->F),我们不会进行这种区分,我们只会看到调用者/被调用者。我在Unix环境中。谢谢你的帮助,

克里斯托夫