相关疑难解决方法(0)

如何分析在Linux上运行的C++代码?

我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?

c++ unix profiling

1732
推荐指数
12
解决办法
49万
查看次数

超越堆栈采样:C++ Profilers

黑客的故事

日期是12/02/10.圣诞节前几天正在逐渐消失,作为一名Windows程序员,我几乎成了一个重要的障碍.我一直在使用AQTime,我已经尝试过困,有光泽,而且非常困,正如我们所说,VTune正在安装.我曾尝试使用VS2008探测器,它一直在积极惩罚,而且经常无法察觉.我使用了随机暂停技术.我检查了呼叫树.我已经解雇了函数跟踪.但令人痛苦的事实是,我正在使用的应用程序超过一百万行代码,可能还有另外一百万行的第三方应用程序.

我需要更好的工具. 我已经阅读了其他主题. 我已经尝试了每个主题中列出的每个分析器.只需要比这些垃圾和昂贵的选择更好的东西,或几乎没有收获的荒谬工作.为了使问题更加复杂,我们的代码经过严格的线程化,并运行了许多Qt事件循环,其中一些非常脆弱,以至于由于时序延迟而导致重负荷仪表崩溃.不要问我为什么我们运行多个事件循环.没有人能告诉我.

在Windows环境中,Valgrind还有更多选择吗?
有没有什么比我已经尝试过的大量破碎工具更好的了?
是否有任何旨在与Qt集成的东西,也许是在队列中有用的事件显示?

我尝试过的工具的完整列表,以及斜体中非常有用的工具:

  • AQTime:相当不错!深度递归有一些问题,但在这些情况下调用图是正确的,并且可用于清除您可能遇到的任何混淆.不是一个完美的工具,但值得尝试.它可能适合您的需求,而且在大多数情况下它对我来说当然足够好.
  • 调试模式下的随机暂停攻击:没有足够的时间信息.
    一个好工具,但不是一个完整的解决方案
  • Parallel Studios: 核选项.突兀,怪异,疯狂的强大.我认为你应该进行30天的评估,并确定它是否合适.它也很酷.
  • AMD Codeanalyst: 精彩,易于使用,非常容易崩溃,但我认为这是一个环境问题.我建议尝试一下,因为它是免费的.
  • Luke Stackwalker:在小型项目上工作得很好,它有点试图让它在我们的工作上运行.虽然有一些好的结果,但它绝对取代了我的个人任务Sleepy.
  • PurifyPlus:不支持Win-x64环境,最突出的是Windows 7.否则非常出色.其他部门的一些同事也发誓.
  • VS2008 Profiler:在功能跟踪模式下以所需分辨率生成100 + gigs范围内的输出.从好的方面来说,产生可靠的结果.
  • GProf:要求GCC甚至适度有效.
  • VTune:VTune的W7支持犯罪边界.否则很棒
  • 密码:我需要破解自己的工具,所以这是最后的手段.
  • Sleepy\VerySleepy:对于较小的应用程序很有用,但在这里让我失望.
  • EasyProfiler:如果您不介意手动注入一些代码来指示仪器的位置,那就不错了.
  • Valgrind:*nix only,但是当你在那个环境中时非常好.
  • OProfile:仅限Linux.
  • Proffy:他们拍野马.

我没试过的建议工具:

  • XPerf:
  • Glowcode:
  • Devpartner:

备注:目前 英特尔环境.VS2008,提升库.Qt 4+.他们所有人的悲惨态度:通过trolltech进行Qt/MFC整合.


现在:差不多两周后,看起来我的问题已经解决了.感谢各种工具,包括列表中的几乎所有工具以及我的一些个人技巧,我们发现了主要的瓶颈.但是,我将继续测试,探索和尝试新的分析器以及新技术.为什么?因为我欠你们的,因为你们摇滚.它确实减慢了时间线,但我仍然非常高兴继续尝试新工具.

概要
在许多其他问题中,最近已将许多组件切换到不正确的线程模型,由于我们下面的代码突然不再是多线程的,因此导致严重的挂起.我不能说更多,因为它违反了我的保密协议,但我可以告诉你,通过临时检查甚至正常的代码审查都不会发现这种情况.如果没有分析器,调用图和随机暂停,我们仍然会在美丽的蓝色天空中尖叫着我们的愤怒.值得庆幸的是,我与一些我见过的最好的黑客合作,我可以获得一个充满伟大工具和优秀人才的惊人"诗歌.

Gentlefolk,我非常欣赏这一点,并且唯一的遗憾是我没有足够的代表来奖励你们每个人.我仍然认为这是一个重要的问题,要比我们到目前为止得到的更好的答案.

结果,在接下来的三个星期的每周,我将提供我能负担得起的最大奖金,并用我认为不是常识的最好的工具授予它答案.三个星期后,如果你原谅我的惩罚,我们希望已经积累了一些关于剖析器的确切概况.

外卖
使用分析器.他们对Ritchie,Kernighan,Bentley和Knuth来说已经足够了.我不在乎你认为你是谁.使用分析器.如果你得到的那个不起作用,找另一个.如果你找不到一个,代码一.如果你不能编码一个,或者它是一个小挂机,或者你只是卡住,使用随机暂停.如果一切都失败了,请聘请一些研究生来敲打一个剖析器.


更长远的观点
所以,我认为写一些回顾可能会很好.我选择与Parallel Studios广泛合作,部分原因是它实际上是建立在PIN工具之上的.在与一些研究人员进行了学术交流之后,我觉得这可能是一些品质的标志.谢天谢地,我是对的.虽然GUI有点可怕,但我发现IPS非常有用,尽管我不能轻易地为每个人推荐它.至关重要的是,没有明显的方法可以获得线级命中数,这是AQT和其他一些分析器提供的,我发现它对于检查分支选择率等非常有用.在网上,我也喜欢使用AQTime,我发现他们的支持非常敏感.同样,我必须符合我的建议:他们的许多功能都不能很好地工作,其中一些功能在Win7x64上完全崩溃.XPerf的表现也令人钦佩,但是对于在某些类型的应用程序上获得良好读取所需的采样细节来说,这是非常缓慢的.

现在,我不得不说我不认为在W7x64环境中分析C++代码有一个明确的选择,但肯定有一些选项无法执行任何有用的服务.

c++ optimization profiler qt profiling

145
推荐指数
4
解决办法
1万
查看次数

使用cProfile在Python中分析类的方法?

我想使用cProfile在Python中分析函数的方法.我尝试了以下方法:

import cProfile as profile

# Inside the class method...
profile.run("self.myMethod()", "output_file")
Run Code Online (Sandbox Code Playgroud)

但它不起作用.如何用"run"调用self.method?

python profiler cprofile

34
推荐指数
3
解决办法
2万
查看次数

如何用PHP生成火焰图?

我了解了火焰图并发现它们很吸引人 - 但是,我找不到有关如何为我的PHP脚本生成火焰图的有用参考.如何使用PHP收集数据并生成图形?

php profiling graph

33
推荐指数
1
解决办法
2456
查看次数

VS2010分析器:是否可以分析一种特定方法?

可能有一些方法可以打开和关闭代码分析?

或者您可以选择要分析的特定功能吗?

profiler profiling visual-studio-2010 visual-studio

24
推荐指数
2
解决办法
1万
查看次数

如何配置我的代码?

我想知道如何分析我的代码.

我已经阅读了文档,但由于没有给出任何例子,我无法从中得到任何结果.

我有一个很大的代码,它花了很多时间,因此我想分析并提高其速度.我没有在方法中编写我的代码,其间很少但不完全.我的代码中没有任何主要内容.我想知道如何使用分析.我正在寻找关于如何分析的一些示例或示例代码.

我尝试了psyco,即在我的代码顶部添加两行:

import psyco
psyco.full()
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?它没有表现出任何改善.任何其他加速方式,请建议.

python profiling

20
推荐指数
3
解决办法
1万
查看次数

虽然我们将常量放在大O符号中,但它在现实生活中是否重要?

虽然我知道大O符号只是简单地描述了算法的增长率,但我不确定以下O(n)算法之间在现实生活中的效率是否有任何差异.

从列表末尾打印链接列表中的节点值.

给定一个节点:

/* Link list node */
struct node
{
  int data;
  struct node* next;
};
Run Code Online (Sandbox Code Playgroud)

解决方案1 ​​O(n)

该解决方案迭代列表两次,一次找到列表的长度,而第二次去的列表的末尾- N的.

void printNthFromLast(struct node* head, int n)
{
    int len = 0, i;
    struct node *temp = head;


    // 1) Count the number of nodes in Linked List
    while (temp != NULL)
    {
        temp = temp->next;
        len++;
    }

    // Check if value of n is not more than length of the linked list
    if (len < …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm performance big-o

20
推荐指数
2
解决办法
1533
查看次数

Windows上的本机C++有哪些优秀的分析器?

我正在寻找一个用于本机C++的分析器.它当然不一定是免费的,但成本会影响购买决策.这是为了商业工作,所以我不能使用个人或学术许可副本.

我正在寻找的主要功能是:

  • 流程级别指标
  • 组件级指标
  • 行级指标
  • 支持多线程代码
  • 可用性
  • 成本
  • 需要Visual Studio 2005 Professional支持(非常需要VS 2008 Professional支持)

我使用过英特尔的VTune和Compuware的Devpartner性能分析社区版.

VTune似乎非常强大,但它有一个陡峭的学习曲线.它也非常"模块化",所以你必须弄清楚你需要购买哪些部件.

DevPartner PACE非常易于使用,并提供所有关键功能,但它只进行了45天的试用.许可版本(Visual C++ BoundsChecker Suite的DevPartner)大约1400美元一个座位,这是可行的,但有点高imo.

什么是原生C++的优秀剖析器和为什么


也可以看看:

什么是你最喜欢的C++分析工具

c++ windows performance profiling

17
推荐指数
1
解决办法
2万
查看次数

如何使用gprof与cmake

我已经查看了几十个用gprof进行性能分析的教程.我正在尝试使用SMT求解器dReal的代码.为了构建程序,我首先安装了g ++ - 4.8,Bison,Flex和Cmake.然后构建dReal,说明执行以下操作:

git clone git@github.com:soonhokong/dReal.git dreal  
cd dreal  
mkdir -p build/release  
cd build/release  
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=g++-4.8 -DCMAKE_C_COMPILER=gcc-4.8 ../../src  
make
Run Code Online (Sandbox Code Playgroud)

在这里,我应该添加-pg?我是编程的新手,因此非常感谢推理而不是答案.我知道你应该把它添加-pg到编译阶段但是所有的教程都说要把它放在g ++或gcc之后.我找不到如何修改cmake的代码.我确实尝试将构建类型更改为PROFILE,但这没有帮助.

profiling cmake gprof dreal

9
推荐指数
2
解决办法
1万
查看次数

哪个是您使用过的最可靠,最快的Windows C++分析器?

我需要在Windows上分析一个实时的C++应用程序.大多数可用的分析器要么非常昂贵,要么完全过度,或者两者兼而有之.我不需要任何.NET东西.由于它是一个实时应用程序,我需要尽可能快的分析器.如果它以某种方式与Visual Studio 2005/2008集成,那将是非常好的,但这不是必需的.如果这个描述提醒您使用的探查器,我真的很想知道它.我希望借助人们在Windows上使用C++分析器来确定能够完成这项工作的人.谢谢.

c++ windows performance profiler visual-studio

8
推荐指数
1
解决办法
1895
查看次数

gperftools如何在引擎盖下工作?

我正在寻找一个关于gperftools如何工作的简单解释.到目前为止,这是我所学到的:

  • 它运行一个世界各地的采样器.换句话说,它会定期停止正在分析的程序以收集信息.
  • Golang的pprof库使用下面的gperftools.

除了一般概述,以下是我想回答的一些具体问题:

  • gperftools是" 基于事件的分析器 "还是" 仪器分析器 ".据我所知,这些分析器修改程序运行的方式并通过这些修改收集样本
  • 在操作系统的"级别"中,gperftools的配置文件是什么?它是否像SystemTapperf一样描述核心?
  • gperftools可以安全地在高流量的生产服务器上运行吗?

我问这个问题来推断在Go服务器上使用pprof引入的开销.

google-perftools gperftools pprof

7
推荐指数
1
解决办法
773
查看次数

gprof和(unix)时间之间的差异; gprof报告较低的运行时间

我有简单的排序程序,我正在分析,以便有一个案例来研究gprof; 我后来计划分析一个更大的算法.

我编译-pg并运行./sort来生成gmon.out文件.但是,当我运行gprof ./sort gmon.out累积秒数和自秒时产生的值时,我认为不准确.

首先,跑步time(./sort)我得到:

real    0m14.352s
user    0m14.330s
sys     0m0.005s
Run Code Online (Sandbox Code Playgroud)

我的秒表准确无误.

但是,平面轮廓的gprof结果是:

Each sample counts as 0.01 seconds.
%   cumulative   self              self     total           
time   seconds   seconds    calls   s/call   s/call  name    
56.18      2.76     2.76        1     2.76     4.71  sort(std::vector<int, std::allocator<int> >&)
35.01      4.49     1.72 1870365596     0.00     0.00  std::vector<int, std::allocator<int> >::operator[](unsigned long)
8.96      4.93     0.44   100071     0.00     0.00  std::vector<int, std::allocator<int> >::size() const
0.00      4.93     0.00    50001     0.00     0.00  __gnu_cxx::new_allocator<int>::construct(int*, int const&)
0.00      4.93 …
Run Code Online (Sandbox Code Playgroud)

c++ profiler profiling g++ gprof

2
推荐指数
1
解决办法
428
查看次数