我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
日期是12/02/10.圣诞节前几天正在逐渐消失,作为一名Windows程序员,我几乎成了一个重要的障碍.我一直在使用AQTime,我已经尝试过困,有光泽,而且非常困,正如我们所说,VTune正在安装.我曾尝试使用VS2008探测器,它一直在积极惩罚,而且经常无法察觉.我使用了随机暂停技术.我检查了呼叫树.我已经解雇了函数跟踪.但令人痛苦的事实是,我正在使用的应用程序超过一百万行代码,可能还有另外一百万行的第三方应用程序.
我需要更好的工具. 我已经阅读了其他主题. 我已经尝试了每个主题中列出的每个分析器.只需要比这些垃圾和昂贵的选择更好的东西,或几乎没有收获的荒谬工作.为了使问题更加复杂,我们的代码经过严格的线程化,并运行了许多Qt事件循环,其中一些非常脆弱,以至于由于时序延迟而导致重负荷仪表崩溃.不要问我为什么我们运行多个事件循环.没有人能告诉我.
在Windows环境中,Valgrind还有更多选择吗?
有没有什么比我已经尝试过的大量破碎工具更好的了?
是否有任何旨在与Qt集成的东西,也许是在队列中有用的事件显示?
我尝试过的工具的完整列表,以及斜体中非常有用的工具:
我没试过的建议工具:
备注:目前 英特尔环境.VS2008,提升库.Qt 4+.他们所有人的悲惨态度:通过trolltech进行Qt/MFC整合.
概要
在许多其他问题中,最近已将许多组件切换到不正确的线程模型,由于我们下面的代码突然不再是多线程的,因此导致严重的挂起.我不能说更多,因为它违反了我的保密协议,但我可以告诉你,通过临时检查甚至正常的代码审查都不会发现这种情况.如果没有分析器,调用图和随机暂停,我们仍然会在美丽的蓝色天空中尖叫着我们的愤怒.值得庆幸的是,我与一些我见过的最好的黑客合作,我可以获得一个充满伟大工具和优秀人才的惊人"诗歌.
Gentlefolk,我非常欣赏这一点,并且唯一的遗憾是我没有足够的代表来奖励你们每个人.我仍然认为这是一个重要的问题,要比我们到目前为止得到的更好的答案.
结果,在接下来的三个星期的每周,我将提供我能负担得起的最大奖金,并用我认为不是常识的最好的工具授予它答案.三个星期后,如果你原谅我的惩罚,我们希望已经积累了一些关于剖析器的确切概况.
外卖
使用分析器.他们对Ritchie,Kernighan,Bentley和Knuth来说已经足够了.我不在乎你认为你是谁.使用分析器.如果你得到的那个不起作用,找另一个.如果你找不到一个,代码一.如果你不能编码一个,或者它是一个小挂机,或者你只是卡住,使用随机暂停.如果一切都失败了,请聘请一些研究生来敲打一个剖析器.
现在,我不得不说我不认为在W7x64环境中分析C++代码有一个明确的选择,但肯定有一些选项无法执行任何有用的服务.
我想使用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?
可能有一些方法可以打开和关闭代码分析?
或者您可以选择要分析的特定功能吗?
我想知道如何分析我的代码.
我已经阅读了文档,但由于没有给出任何例子,我无法从中得到任何结果.
我有一个很大的代码,它花了很多时间,因此我想分析并提高其速度.我没有在方法中编写我的代码,其间很少但不完全.我的代码中没有任何主要内容.我想知道如何使用分析.我正在寻找关于如何分析的一些示例或示例代码.
我尝试了psyco,即在我的代码顶部添加两行:
import psyco
psyco.full()
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?它没有表现出任何改善.任何其他加速方式,请建议.
虽然我知道大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++的分析器.它当然不一定是免费的,但成本会影响购买决策.这是为了商业工作,所以我不能使用个人或学术许可副本.
我正在寻找的主要功能是:
我使用过英特尔的VTune和Compuware的Devpartner性能分析社区版.
VTune似乎非常强大,但它有一个陡峭的学习曲线.它也非常"模块化",所以你必须弄清楚你需要购买哪些部件.
DevPartner PACE非常易于使用,并提供所有关键功能,但它只进行了45天的试用.许可版本(Visual C++ BoundsChecker Suite的DevPartner)大约1400美元一个座位,这是可行的,但有点高imo.
什么是原生C++的优秀剖析器和为什么?
我已经查看了几十个用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,但这没有帮助.
我需要在Windows上分析一个实时的C++应用程序.大多数可用的分析器要么非常昂贵,要么完全过度,或者两者兼而有之.我不需要任何.NET东西.由于它是一个实时应用程序,我需要尽可能快的分析器.如果它以某种方式与Visual Studio 2005/2008集成,那将是非常好的,但这不是必需的.如果这个描述提醒您使用的探查器,我真的很想知道它.我希望借助人们在Windows上使用C++分析器来确定能够完成这项工作的人.谢谢.
我正在寻找一个关于gperftools如何工作的简单解释.到目前为止,这是我所学到的:
除了一般概述,以下是我想回答的一些具体问题:
我问这个问题来推断在Go服务器上使用pprof引入的开销.
我有简单的排序程序,我正在分析,以便有一个案例来研究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)