我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
到目前为止,我只使用过Rational Quantify.我听说过有关英特尔VTune的好消息,但从未尝试过!
编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好结果的唯一方法.
Windows是否有适当的采样(例如,非仪器)分析器?最好一个类似于鲨鱼在MacOS,虽然我愿意接受我我将不得不支付这样一个分析器上的窗口.
我试着在VS团队套件探查,并没有太深刻的印象,并想知道是否有任何其他好的.
[编辑:ERK,我忘了说,这是C/C++,而不是.NET - 抱歉任何混淆]
我希望描述CPU(尽可能的样本),尽可能小的性能影响(因此类似于GCC -pg),使用Clang编译的二进制文件.是否有替代方法使用代码检测,或产生类似于gprof的输出?
任何人都可以为C++推荐一个好的代码分析器吗?
我遇到了Shiny - 有什么好处吗?http://sourceforge.net/projects/shinyprofiler/
为了使程序具有高效缓存,所使用的数据应该线性存储吗?
因此,我使用线性分配器将数据放入blob中,而不是动态分配.这是否应该提高性能?我该怎么做才能进一步提高缓存效率?
我知道这些问题不具体,但我不知道如何解释......
哪些程序可以帮助我分析缓存命中/未命中?
根据我的说法,我运行gprof了一个C++程序,我得到了第一行输出:16.637stime()
% cumulative self self total
time seconds seconds calls s/call s/call name
31.07 0.32 0.32 5498021 0.00 0.00 [whatever]
Run Code Online (Sandbox Code Playgroud)
为什么31.07%它只花了.32几秒钟的时间列表?这是一次通话时间吗?(这不是自我/电话吗?)
这是我第一次使用gprof,所以请善待:)
编辑:通过向下滚动,似乎gprof认为我的程序需要1.03秒.为什么会这么错呢?