草庐IT

profiling

全部标签

c++ - 性能差异:std::accumulate vs std::inner_product vs Loop

今天,我想分享一些在尝试实现这个简单操作时让我大吃一惊的事情:我发现了执行相同操作的不同方法:通过使用std::inner_product。实现谓词并使用std::accumulate函数。使用C风格的循环。我想通过使用QuickBench并启用所有优化来执行一些基准测试。首先,我比较了两个具有浮点值的C++替代方案。这是通过使用std::accumulate使用的代码:constautopredicate=[](constdoubleprevious,constdoublecurrent){returnprevious+current*current;};constautoresul

c++ - Very Sleepy 分析器中花括号附近显示的时间测量值代表什么?

我正在使用VerySleepy分析一些C++代码,我注意到在SourceView中,它显示了红色的逐行时间测量值,在某些情况下,只有方法的左花括号或右花括号的行总是有测量值与函数中的其他代码行相比,这些情况非常高。我最初的假设是显示将方法参数压入左大括号堆栈所花费的时间,以及为右大括号弹出堆栈所花费的时间。这是真的吗? 最佳答案 我从VerySleepy的维护者RichardMitton(@grumpydev)在推特上得到了一个答案:“很可能函数已经优化,所以行号与代码不完全匹配更多。也就是说,所有时间都集中在开始时,而不是分散在函

c++ - 为什么自制的二进制搜索算法比 std::binary_search 慢?

std::binary_search击败了一个简单的自制二进制搜索算法(再次)://gccversion4.8.2X86_64#ifndefEXAMPLE_COMPARE_VERSION#defineEXAMPLE_COMPARE_VERSION0#endifstaticconstlonglongLOOPS=0x1fffffff;#include#include#include#include#ifEXAMPLE_COMPARE_VERSION#includeinlineboolstl_compare(constintl,constintr){returnlv)end=p-1;else

c++ - 我如何分析超出每个功能级别的代码?

AFAIK分析器只能判断每个函数花费了多少时间。但由于C++编译器倾向于积极地内联代码,而且一些函数并不那么短,因此了解更多细节通常很有用-每个构造消耗多少时间。除了将代码重组为更小的函数外,如何实现这一点? 最佳答案 如果您使用采样分析器(例如Zoom或Shark),而不是仪器化分析器(例如gprof),那么您可以获得更细粒度的分析器配置文件,细化到语句和指令级别。 关于c++-我如何分析超出每个功能级别的代码?,我们在StackOverflow上找到一个类似的问题:

c++ - Cachegrind:为什么有这么多缓存未命中?

我目前正在学习Linux下的各种分析和性能实用程序,尤其是valgrind/cachegrind。我有以下玩具程序:#include#includeintmain(){constunsignedintCOUNT=1000000;std::vectorv;for(inti=0;i用g++-O2-gmain.cpp编译这个程序并运行valgrind--tool=cachegrind./a.out,然后cg_annotatecachegrind。out.31694--auto=yes产生以下结果:------------------------------------------------

c++ - 我如何分析完整的 C++ 构建?

我正在WindowsXP上用C++开发一个应用程序,使用Eclipse作为我的IDE,以及一个基于Makefile的构建系统(使用自定义工具来生成Makefile)。此外,我正在使用LZZ,它允许我编写一个文件,然后将其拆分为一个头文件和一个实现文件。我正在使用TDM的GCC4端口。我可以使用哪些工具或技术来准确确定构建过程的每个部分需要多少时间,以及为什么它很慢?特别感兴趣的是:make需要多少时间来解析Makefile、找出依赖关系、检查时间戳等?Eclipse在构建前后需要多少时间?GCC在解析系统和提升header上花费了多少时间?P.S.:这是我的家庭项目,所以昂贵的工具对我

c++ - for循环中的热点

我正在尝试优化这段代码。staticlvh_distancelevenshtein_distance(conststd::string&s1,conststd::string&s2){constsize_tlen1=s1.size(),len2=s2.size();std::vectorcol(len2+1),prevCol(len2+1);constsize_tprevColSize=prevCol.size();for(unsignedinti=0;iIntelVTune显示大约一半的处理器时间花费在第二个for上。说明,而不是中的2行for循环。当我展开程序集源时,我可以看到fo

c++ - 在 C++ 中处理大量的执行时间分析

我目前在做一个涉及海量数据和复杂算法的科学计算项目,所以我需要做大量的代码分析。我目前依赖和clock_t为我的代码的执行计时。我对这个解决方案非常满意……除了我基本上是在为所有事情计时,因此对于每一行实际代码我都必须调用start_time_function123=clock(),end_time_function123=clock()和cout.这会导致严重的代码膨胀,并很快使我的代码变得不可读。你会如何处理?我能想到的唯一解决方案是找到一个IDE,允许我标记我的部分代码(在不同的位置,甚至在不同的文件中)并通过一个按钮切换隐藏/显示所有标记的代码。这将允许我在大部分时间隐藏与分析

C++ 分析/优化 : How to get better profiling granularity in an optimized function

我正在使用谷歌的perftools(http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html)进行CPU分析——这是一个很棒的工具,帮助我对我的应用程序进行了大量的CPU时间改进。不幸的是,我已经到了这样的地步,代码仍然有点慢,当使用g++的-O3优化级别编译时,我所知道的是特定函数慢,但不知道它的哪些方面慢。如果我删除-O3标志,则程序的未优化部分会超过此函数,并且我无法清楚地了解函数的实际运行缓慢的部分。如果我保留-O3标志,那么函数的慢部分将被内联,我无法确定函数的哪些部分是慢的。有什么建议吗?感谢您

c++ - 如何在命令行中使用 MS 代码覆盖工具?

我有以下C++代码。#includeusingnamespacestd;inttestfunction(intinput){if(input>0){return1;}else{return0;}}intmain(){testfunction(-1);testfunction(1);}我编译它得到执行cl/Zihello.cpp-link/Profile然后,我检测执行并生成.coverage二进制文件。vsinstr-coveragehello.exestartvsperfmon-coverage-output:mytestrun.coveragevsperfcmd-shutdown当