问题标签 [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.
c++ - 什么是 __printf_fp() 以及何时调用?
在使用 callgrind 分析我的代码后,我看到 __printf_fp() 是 self 列中具有更多价值的函数。这个函数是什么,什么时候调用?
谢谢!
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 优先级队列的小修改。
谢谢!
c++ - kcachegrind:没有可用于以下功能的源
我正在尝试使用 Ubuntu 12.04 查看带注释的源代码$ valgrind --tool=callgrind ./myProgram
($ kcachegrind
我在$ qcachegrind
使用 Mac OSX 时遇到了同样的问题)。
C++ 脚本myProgram.cpp
调用.hpp
文件中的函数(通过#include "../include/myHeader.hpp"
等)。我这样编译myProgram.cpp
:
我不关心查看该第三方库的注释源。
我想看到的是myHeader.hpp
in和 for 函数的注释源myProgram.cpp
。
相反,我看到了 kcachegrind 的 Flat Profile 窗口,其中列出了所有被调用的函数,包括其中的函数myHeader.hpp
-这很棒。现在,kcachegrind 将函数的位置报告myHeader.hpp
为 from myProgram
-这很奇怪。最后,当我从 Flat Profile 窗口中选择任何功能并请求查看源代码时,我会遇到:
我试过的:
myHeader.hpp
使用 kcachegrind 的 GUI将目录添加到注释列表中。使用 -O0 编译以删除编译器优化
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。自我,简短,公式。
我在这里没有任何想法。
到目前为止,我已经阅读了这些问题:
c++ - 对单个函数进行基准测试
如何对函数进行基准测试?查看 callgrind 的结果,我发现我的程序在pow
. 由于我不需要完整的工作精度,我认为我可以创建一个查找表并在表中的点之间使用线性插值。为了能够评估查找表方法,我需要测量时间。所以我这样做了:
运行此程序时,每次迭代的输出约为 2.25 个周期。这似乎很低,因为执行pow
似乎是(它callgrind
给了我__ieee754_pow
)。
在 x86-64 上为 GNU/Linux 编译时,汇编中的基准循环如下所示:
至少pow
被称为。我可以相信输出还是有一些消除事物的黑魔法。
c++ - Callgrind 在 O1 或 O3 上进行性能分析?
我需要分析我的 C++ 代码,valgrind --tool=callgrind
这是一个非常出色的工具。但是,我想知道是否应该使用-g -pg -O1
or -g -pg -O3
(GCC 4.4.7) 来分析我的代码?后者更准确地描述了我的程序性能,但我担心这-O3
会混淆分析器并混淆哪些源函数是实际的瓶颈。也许我只是害怕老太太的故事,但我想我应该在进行可能的几个小时测试之前先确定一下。
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.
c++ - C++ 分析:时钟周期计数
我valgrind --tool=callgrind
用来分析我的 C++ 程序的一个关键部分。
该部分本身的执行时间不到一微秒,因此我正在分析该部分上的大量循环。
我注意到指令的执行时间是 0.13% 的倍数(占程序总执行时间的百分比)。所以我只看到 0.13、0.26、0.52 等等。
我的问题是,我应该假设这个原子量测量 CPU 周期吗?见照片。(callgrind
输出以图形方式显示kcachegrind
。)
编辑:顺便说一下,看看机器代码,我看到mov
需要 0.13 所以这可能确实是一个时钟周期。
r - 在简单的 R 文件上运行 Callgrind
我想使用 Callgrind 来查找一些复杂的 Rcpp 代码中的瓶颈。由于我无法让它工作,我决定改为编写一个简单的 R 文件,以确保它正在做它应该做的事情。
但是,我仍然无法让它工作。
我的简单功能是:
然后我输入:
这似乎运行良好,并产生 callgrind.out.XYZ,正如文档所说的那样。
然后我输入:
并获得以下信息:
这与我使用更复杂的代码时遇到的错误完全相同,因此除了函数之外的某些东西有问题。
请问有人知道我做错了什么吗?谢谢。
profiling - c++ - 分析以获取被调用函数的概述
我想分析我的程序不是出于性能原因,而是为了查看程序的逻辑。如果函数 A 调用 B 然后 C 和 D 它会是这样的:
目前我使用 valgrind/callgrind。它非常有用,但不能完全满足我的需求。我们看不到所有不同的调用堆栈,也看不到函数的调用顺序。例如,如果我们也有 F->G(但在上下文中没有堆栈 A->C->F),我们不会进行这种区分,我们只会看到调用者/被调用者。我在Unix环境中。谢谢你的帮助,
克里斯托夫