问题标签 [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.
parallel-processing - Callgrind 在分析并行代码时测量什么?
我想分析我的并行代码(mpi 和 omp)
我发现 Callgrind 非常易于使用和分析(使用 Kcachegrind)串行代码,因为它可以为您提供在不同功能上花费的相对时间。
运行并行代码时它会给我什么?它会只监视主进程还是会汇总所有进程?
它可以检测死锁或一个进程正在等待另一个进程的位置吗?
在分析并行代码时是否有更好的工具可以使用?
c++ - 跳过 Qt Valgrind Function Profiler 中的代码
在 Qt 中,您可以集成valgrind来分析您的代码。我在分析模式下使用Valgrind 函数分析器并点击开始按钮。问题是,我有一个我不感兴趣的庞大启动序列。
我在valgrind/callgrind.h中找到了可以帮助我的定义:
- CALLGRIND_START_INSTRUMENTATION
- CALLGRIND_STOP_INSTRUMENTATION
- CALLGRIND_DUMP_STATS
根据这篇文章,我必须使用以下选项执行valgrind :
valgrind --tool=callgrind --instr-atstart=no ./application
但是我如何在 Qt 中做到这一点?我仍然想使用漂亮的 GUI 和导航。谢谢!
c++ - 如何使用 KCachegrind 和 Callgrind 仅测量我的部分代码?
我想使用valgrind来分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。
我在valgrind/callgrind.h中找到了可以帮助我的定义:
- CALLGRIND_START_INSTRUMENTATION
- CALLGRIND_STOP_INSTRUMENTATION
- CALLGRIND_DUMP_STATS
根据这篇文章,我必须使用以下选项执行valgrind :
valgrind --tool=callgrind --instr-atstart=no ./application
当我这样做时,会创建两个文件:
- callgrind.out.16060
- callgrind.out.16060.1
然后我想使用 kcachegrind 来可视化我的结果。这很好用,但跳过我的启动序列的 makros 似乎什么也没做。我必须做什么才能仅在我想要的地方测量性能?
c++ - Valgrind - callgrind Profiler:如何知道哪个函数需要更多时间
我正在尝试使用 valgrind - callgrind 工具来分析某些可执行文件。我已经使用callgrind_annotate --auto=yes
. 创建的输出告诉我 Ir count ,根据我的理解,它是特定指令被调用的次数,但我想知道代码的哪一部分在执行中花费了最大时间。
我怎么知道呢?
在我的应用程序中,我想找到花费更多时间的部分......可能在某些情况下,某些函数被调用的时间比其他函数更多......但是被调用的时间更少的函数比其他
valgrind - 使 callgrind 显示 kcachegrind 调用图中的所有函数调用
我正在使用 valgrind 工具 - callgrind 和 kcachegrind 来分析一个大型项目,并且想知道是否有一种方法可以让 callgrind 报告所有函数(不仅仅是最昂贵的函数)的统计信息。
具体来说 - 当我在 kcachegrind 中可视化调用图时,它只包含那些非常昂贵的函数,但我想知道是否有办法将项目中的所有函数都包含在调用图中。用于生成分析信息的命令如下:
我不确定是否必须为 valgrind 提供任何选项,或者可能以不同的优化方式编译应用程序。这可能是微不足道的,但我找不到解决方案。对此高度赞赏的任何指针。
谢谢 !
c++ - 需要帮助了解 kcachegrind
我试图了解kcachegrind,那里似乎没有太多信息,例如,在左侧窗口中,什么是“Self”,什么是“incl.”?(见1 个核心)。
我做了一些弱扩展测试,没有通信,所以我猜这与缓存未命中有关。但据我所见,1 核和 16 核的数据未命中数相同,请参阅:16 cores。
我可以看到 1 核和 16 核之间的唯一区别是,在 16 核上调用 memcpy 的次数要少得多(我可以解释)。但我仍然无法弄清楚为什么在一个核心上,执行时间是 0.62 秒,而在 16 个核心上,执行时间更接近 1 秒。每个处理器都在做相同数量的工作。如果有人能告诉我在 kcachegrind 中寻找什么,那就太棒了,这是我第一次使用 kcachegrind 和 valgrind。
编辑:我的代码以压缩行格式连接矩阵。它涉及循环子矩阵的条目并使用 memcpy 将值复制到结果矩阵中。这是代码: - 我不能发布超过 2 个链接......所以我会在评论中发布它。
我只在循环本身上启动了 valgrind,循环也是 0.62 秒执行时间和 1 秒执行时间之间的差异。花费最多时间的部分是对 memcpy 的调用(下面 github gist 中的第 37 行),当我将其注释掉时,我的代码执行时间不到 0.2 秒,尽管 1 到 16 个内核之间仍然有增加(大约增加 30%)。
我在一个包含 24 个内核的 haswell 节点上运行我的代码(两个英特尔® 至强® 处理器 E5-2690 v3)
每个核心有 5GB 内存。
c++ - Valgrind 报告段溢出
使用 valgrind / callgrind 运行我的程序时,我经常收到以下消息:
==21734== brk segment overflow in thread #1: can't grow to 0x4a39000
(地址不同)
请注意,它前面没有堆栈溢出消息。
我找不到有关此消息的任何文档,而且我不知道究竟是什么溢出。
任何人都可以帮我找出问题所在吗?这是 valgrind 的问题,还是我的程序的问题?
c++ - 为什么 Valgrind 挂在 SDL_Init (SDL2) 调用上?
我正在尝试使用 Callgrind 来监视 SDL2 应用程序中的缓存使用情况,但它挂在 SDL_Init 调用上 - 编辑:澄清一下,Valgrind 挂起,我的程序没有进一步的输出,Valgrind 似乎陷入了等待函数调用完成,但它永远不会。这是展示问题的最小来源:
挂起时的输出:(已编辑以包含额外的调试信息,使用标志 -v -d 和 --fair-sched=try 生成)
运行valgrind ./Application
也会给出错误(截断):
编辑:我试过通过 gdb 运行它,它非常高兴。通过 helgrind 或 drd 运行它会在 SDL_Init 调用中产生 segfault:11 。
鉴于 gdb 是干净的,我认为通过 valgrind 运行 SDL 应用程序会导致这个问题,但我不知道它可能是什么,或者如何解决这个问题,我找不到任何关于它的进一步讨论我自己的调查。
来自 hlgrind 的完整堆栈跟踪:
这是在最新的 El Capitan Macbook、Valgrind-3.12.0.SVN 和 LibVEX 以及 SDL2-2.0.4 上编译的。
我已经尝试从最新的源代码中编译 SDL2 和 Valgrind(最初是通过 brew 获得的),但这没有任何影响。
有谁知道为什么 Valgrind 会导致 SDL_Init 出现段错误,以及是否有办法解决这个问题?
谢谢
c++ - C++ 分析揭示了矢量热点。如何优化?
我正在使用 callgrind/qcachegrind 分析一些信号处理代码,其中涉及许多操作std::vector<float>
。
我从 Mac OS 的内置nearbyint
函数中得到了一个相当严重的热点。
这似乎几乎完全由这个向量函数调用。
这又是从我的许多类成员函数中调用的。对我来说,这_push_back_slow_path
看起来像是一些分配瓶颈,但我不完全确定为什么。在运行循环中,我没有改变向量的大小。所有正在发生的事情,偶尔会通过引用复制它们,迭代,或者data()
操作用于获取 vDSP 操作的原始指针。例如 。. .
vector
当我将原始数据指针传递给 vDSP 函数时,为什么它是这个热点的罪魁祸首?- 这个热点的可能罪魁祸首是什么?
- 为什么会
basic_string
出现?已分析的库不使用字符串。 std::array
尽可能切换到是明智的下一步行动吗?
随时询问更多信息,我很乐意编辑问题。
编辑 1
作为对第一个答案的回应,我没有明确地push_back
在任何地方打电话。热点出现在看似疯狂的地方,例如浮动上的内联日志操作。这可能是编译器优化做奇怪的事情吗?
java-native-interface - libhdfs 在通过 callgrind 运行时在常量池错误中抛出 Illegal UTF8 string
我正在尝试通过 callgrind 运行我的流程。其中一个子进程(我需要跟踪)调用 libhdfs 并且在通过 callgrind 运行时会引发异常:
正常运行时,我没有收到此异常。知道发生了什么吗?我是 valgrind/callgrind 的新手。