问题标签 [kcachegrind]
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++ - 精确定位 gcc-4.1.2 和 gcc-4.8.1 之间的性能优化
语境:
我目前正在调查我的团队当前的构建环境(仍然使用 gcc-4.1.2)和使用 gcc-4.8.1 的构建之间的性能提升。结果令人震惊,在一次回归中加权平均速度至少提高了 25%。我还使用 gcc-4.4.7 进行了另一项测试,但它只看到了大约 7% 加速的加权平均值。我推测大的差异与新的 C++11 复制/移动语义有关,因为内存事务是我们程序中相当大的瓶颈。我们广泛使用了 STL 类型,所以编译器可能很好地利用了他们新的移动构造函数。
为了验证我的说法,我选择了一个显示平均性能改进的测试,并在其上运行了 kcachegrind 以进行两次编译。结果发布在下面,与我预期的不太一样。我应该指出一个快速且可能相关的细节。由于官僚主义的原因,我不得不静态编译 gcc-4.8.1 的 libstdc++.so。这意味着 kcachegrind 的位置显示了一些我为安全起见已审查的私有库。
令我惊讶的是,对内存操作的调用量相对没有变化(malloc
和_int_malloc
)。另一个有趣的结果是完全不存在memcpy
和增加_memcmp_sse4_1
.
问题:
如果我想验证我的假设,即 C++11 语义是提高性能的原因,我应该在 callgrind 图中寻找什么?我应该找到更少的内存访问,还是应该找到std::string(string&&)
签名(我实际上在这里找不到)。请记住,这是用 编译的-O3
,这可能意味着此类签名已被优化,因此我进退两难。
我很高兴报告如此大的性能提升,但我想了解这种性能的来源。让我知道是否需要报告更多结果以获得更明确的答案。我希望这对 SO 来说不是太笼统的问题......
c++ - C++ 分析:时钟周期计数
我valgrind --tool=callgrind
用来分析我的 C++ 程序的一个关键部分。
该部分本身的执行时间不到一微秒,因此我正在分析该部分上的大量循环。
我注意到指令的执行时间是 0.13% 的倍数(占程序总执行时间的百分比)。所以我只看到 0.13、0.26、0.52 等等。
我的问题是,我应该假设这个原子量测量 CPU 周期吗?见照片。(callgrind
输出以图形方式显示kcachegrind
。)
编辑:顺便说一下,看看机器代码,我看到mov
需要 0.13 所以这可能确实是一个时钟周期。
ruby-on-rails - 迁移到新机器后,第一次 RSpec 测试非常慢
在我迁移到新的 Mac 之前,我的 RSpec 示例运行良好。现在,第一次测试似乎需要 1-3 分钟。下次运行测试(以不同的顺序)时,相同的测试可能只需要 0.2 秒。
rspec -p
将告诉我哪些示例在那轮较慢,但它不能帮助我调试 WHY。
这可能是对外部服务的调用,或者可能是某个外部卷超时,因为它不再连接到这台机器,但我想不出引用可能是什么或在哪里......其他测试相同代码库的队友不要没有这个问题。
想法?
编辑(添加分析结果的图像)
这有帮助吗?我不知道什么cycle 5
意思...
kcachegrind - kcachegrind:如何绘制完整的调用图?
我喜欢 kcachegrind 的调用图。但我一直无法让它绘制完整的调用图。
我想我只需要设置:
- 图表 > 来电深度 > 无限
- 图表 > 被调用者深度 > 无限
- 图表 > 最小值 节点成本 > 无最小值
- 图表 > 最小值 通话费用 > 无最低要求
1和2很简单。3 在备忘录中,但显示为灰色。4 不在菜单中。
有没有办法让它以图形方式显示完整的调用图?
php - 是否可以在 XDebugs 探查器输出文件名中使用 MVC 路径?
我正在使用 XDebug 来分析大型 MVC 应用程序,通过它们的 URI 而不是文件名 (.php) 来分析单个请求会容易得多,因为多个请求是通过内部函数发出的,从而导致单个页面刷新的多个研磨文件。
我已经看到 %p = 进程 ID、%t = 时间戳和 %s = 脚本名称( var_path_to_example.php )
如果文件可以更像grind.{domain}{path}.%p命名会容易得多
这可能吗?我还没有找到任何其他可以做我之后的字符串格式替换器。
单页刷新当前创建了四个研磨文件(三个用于索引,一个是主请求,另外两个是媒体压缩器)和一个用于 img.php 的媒体路径重写器和调整器。
对于这种情况,所有这些都合并到一个 www.example.com/path/to/controller.grind 中会更可取。
kcachegrind - 如何解释 Kcachegrind 图?
我已经开始使用Kcachegrind
性能分析。但我不明白GUI
和输出图。
例如对于这个调用图
SignatureIterator::iterate_parameters()
我不明白 9.25% 指的是什么?SignatureIterator::iterate_parameters()
5 198x 表示调用 了多少次SignatureIterator::parse_type()
?100% in 是什么意思Symbol::byte_at(int) const
?什么是ELF Object
?
注意:在官方文档http://kcachegrind.sourceforge.net/html/CallGraph.html中,但还是不明白是什么the caller distance to the function
?
python - 使用 qcachegrind 处理 profilestats 输出时如何对 python 进行源注释
Kcachegrind是一个出色的实用程序,可以在分析代码时将热点直观地表示到源代码行级别。我发现它在微优化我的 C++ 代码库时非常有用。对于我最新的 python 项目,我开始使用 Kcachegrind 来处理profilestats的输出。Kcachegrind是一个仅限 linux 的实用程序,但有各种非官方端口可用,我正在使用的一个是qcachegrind。一般来说,它在很大程度上可以解决大多数问题,除了我很难让源注释工作。
在源选项卡上,我收到了熟悉的源缺失消息
使用选项
并且添加源基本目录没有用。
我有一种感觉,该实用程序需要一个与 Python 无关的 ELF 对象。在这方面的任何帮助都会很有用。
相关信息:
- 蟒蛇 2.7
- 个人资料统计 (2.0)
- QCachegrind 0.7.4
- 视窗 2012R2
kcachegrind - KCachegrind 的默认扩展是什么
我在 Ubuntu 14.10 上安装了KCachegrind
当我单击打开按钮时,我会看到带有文件“Callgrind Profile Data”的默认过滤器的打开对话框,但看不到我的文件。我必须在过滤器中选择“所有文件”,然后我才能看到我的文件。
什么扩展名必须有我在打开此对话框时见过他一次的文件?
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 似乎什么也没做。我必须做什么才能仅在我想要的地方测量性能?
valgrind - 使 callgrind 显示 kcachegrind 调用图中的所有函数调用
我正在使用 valgrind 工具 - callgrind 和 kcachegrind 来分析一个大型项目,并且想知道是否有一种方法可以让 callgrind 报告所有函数(不仅仅是最昂贵的函数)的统计信息。
具体来说 - 当我在 kcachegrind 中可视化调用图时,它只包含那些非常昂贵的函数,但我想知道是否有办法将项目中的所有函数都包含在调用图中。用于生成分析信息的命令如下:
我不确定是否必须为 valgrind 提供任何选项,或者可能以不同的优化方式编译应用程序。这可能是微不足道的,但我找不到解决方案。对此高度赞赏的任何指针。
谢谢 !