作者gwliao (gwliao)
看板NTUGIEE_EDA
标题[转录][闲聊] gcc + gprof 做程式效能分析 - 以Dev-C …
时间Sun Sep 4 14:42:36 2005
※ [本文转录自 C_and_CPP 看板]
作者: allall (allall) 看板: C_and_CPP
标题: [心得] gcc + gprof 做程式效能分析 - 以Dev-C++为例
时间: Sun Sep 4 10:13:02 2005
耶 标题不知道下得合不合适
首先跟各位说明, 这功能我也是昨天才知道的 @@
所以内容可能会有许多错误 我自己对於这功能也还有些疑问
还烦请各位指点指点
使用环境
作业系统: Windows XP Home Edition
IDE: Dev-C++ Version 4.9.9.1(语言:繁体中文)
参考文献:
[1] gprof 看performance分析… from SuperD's Blog
http://blog.superd.org/index.php?p=39
[2] 各种程式工具 binutils
http://www.slat.org/project/software-map/v1.01/node57.html
简介: from [2]
gprof: 用来显示程式的效率测试资讯(profiling)。通常在我们要试图提升程式
的执行效能时,我们必须要先知道程式的各部分到底花了多少时间来执行,如此
我们心里才能有个底,知道应该由那些部分先下手改进。然而,光从程式码本身
有时候很难评估到底那个部分最花时间,这时就可以靠这个工具程式帮忙了。
在测试前,首先必须在程式编译时加入效率测试资讯 (以 GCC 为例,编译时必
须加入 -pg 的参数),之後当我们执行程式之後,就会跑出一个 gmon.out 的
档案,该档案即内含了效率测试的结果,但它的格式是不可读的,这时就必须
用 gprof 将它读出来。
在 Dev-C++ 上该如何做?
Step 1. 开启 profiling 功能
===============================================================
工具 => 编译器选项 => 程式码产生/最佳化 => 程式执行统计(接下行)
=> 产生可供分析的执行统计资讯(由 No 改为 Yes)
===============================================================
Step 2. 编译并执行你的程式码(注:需正常结束程式,不正常结束程式似乎会产生
0 位元组大小的 gmon.out),结束後,目录下应会产生一 gmon.out 档
Step 3. 看分析结果,即 gmon.out 的内容
=============================
执行 => 执行结果统计分析
=============================
就可看到报表了
(注:Dev-C++ 栏位的位数似乎有限制,超过五位数的位数,会跑到前一栏去)
(解决方法: 命令列下印出, gprof 你编译後的执行档档名(例:xxx.exe)
或导出至档案, gprof 你编译後的执行档档名 > output.txt)
(再注: 要先设定 path 让系统能找到 gprof.exe
例: C:\Dev-Cpp\bin
或抓 gprof.exe 到你程式的目录下 @@ )
报表中提供的资讯:(我的解读可能有误,可参考原文说明)
参考图片:
http://img376.imageshack.us/img376/7070/pic15qz.png
1. 各主要函式占执行时间的百分比 (% time 栏,似乎没有全列)
2. 概略的程式总执行时间 (Cumul. secs的最後一笔,没有全累积,应该算概略吧?
可以这样看吗? @@)
3. 各函式所花费的时间 (Self secs)
4. 各函式被呼叫的次数 (Calls)
....
下一个表显示各主副函式间呼叫与被呼叫与其间所花费的时间
参考图片:
http://img376.imageshack.us/img376/632/pic23xa.png
如同上述,粗略的一篇说明文,还夹杂着许多问号
这有一些问题想要请问各位
1. 上面所提到的资讯解读问题,不知道有没有错
2. 我看到 Dev-C++ 中,有着最佳化的选项
===============================================================
工具 => 编译器选项 => 程式码产生/最佳化 => 最佳化
===============================================================
为什麽预设是 No 呢? 最佳化不是很好吗? 还是说开启後会有什麽样的危险呢?
谢谢大家 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.83.45
1F:推 renderer:推 222.156.8.204 09/04
※ 编辑: allall 来自: 61.224.83.45 (09/04 10:27)
2F:推 SHBK:superD XD 220.140.79.4 09/04
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.230.224
3F:推 moonshade:我最近在徐gprof 61.217.194.122 09/04
4F:→ moonshade:学 61.217.194.122 09/04