如何使用profile工具来解决程序中的瓶颈 --linux篇
2013-01-29 21:33
429 查看
如何使用profile工具来解决程序中的瓶颈 --linux篇
如何使用profile工具来解决程序中的瓶颈 --linux篇我们在写程序,通常需要对程序的性能进行分析,以便程序能够更快更好地运行。如果程序很大,分析起来就很困难。这些涉及程序优化的问题,优化一般都是“case by case”的。首先,遇到程序慢问题时候不能凭感性认识,觉得这是由于单核单线程造成的,就一味的去用openMP或别的去把程序改成多线程或并行(除非你的电脑是双核),甚至去换电脑。这种“黄金锤”的做法就是关键时候用屁股代替了脑袋。
于是,一定要找到真正的程序bottleneck所在。到底是不是你的程序随机访问内存情况太多导致Cache miss 太多,对于图像处理,关键首先是算法吧,用一个O(N)的显然比O(N2)的要快。然后是实现方面的一些优化,比如尽量使用整数而不是浮点数,尽量减少乘、 除这类复杂算法而使用加法和移位。佷多时候一维存取要比二维快佷多。另外,字节对齐也是一个很重要的方面。佷多图像处理库中的图像内存都是字节对齐的。
然后,在Linux下,可以根据gprof产生的统计结果用kprof打开,查看那个函数占用的CPU时间最多,调用频度如何,系统时间和用户时间等各个要素;如果是Solaris系统,vmstat, mpstat, iostat, dbx 等工具产生的统计信息也相当详尽, 结合代码的实现逻辑进行 分析就是了。
这里介绍一种Linux下程序的Profiling工具--- GNU gprof。
GNU gprof能够打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。
gprof的基本用法:
1. 使用 -pg 选项编译和链接你的应用程序
在gcc编译程序的时候,加上-pg选项,例如:
gcc -pg -o test test.c
这样就生成了可执行文件test。如果是大项目,就在makefile里面修改编译选项,-pg放在那里都行。
2. 执行你的应用程序使之生成供gprof 分析的数据
运行刚才的程序:./test,这样就生成了一个gmon.out文件,该文件就包含了profiling的数据。
3. 使用gprof 分析你的应用程序生成的数据
gprof test gmon.out > profile.txt
使用上面的命令,gprof就可以分析程序test的性能,将profiling的结果放在profile.txt文件中,打开就可以看到分析的结果。通过对结果的分析来改进我们的程序,从而达到我们的目的。
win下面可以用intel的vtune,或者visual studio自带的profile工具。我觉得对于图像处理而言,除非算法的瓶颈在数据IO上,否则多线程很难有优化作用,因为线程调度的开销无法抵消。当然双核处理器除外。
相关文章推荐
- Linux下如何使用图形界面工具调试程序
- 如何使用工具调试linux服务程序
- 如何在Linux使用Eclipse + CDT开发C/C++程序? (OS) (Linux) (C/C++) (gcc) (g++)
- 如何在 Windows 恢复环境中使用 Bootrec.exe 工具解决和修复 Windows Vista 中的启动问题
- Linux下编写程序必要工具使用详解
- Linux如何安装使用dstat监控工具以监控系统
- 7.VC(custom)-解决DLL和主调程序的资源冲突及如何使用Dll的资源
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- 如何在Linux下使用Gitblit工具创建Git仓库服务
- 如何在Linux中使用awk工具详解
- 使用 OProfile for Linux on POWER 识别性能瓶颈
- Linux下程序的Profile工具
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 如何在Linux使用Eclipse + CDT开发C/C++程序?
- Linux下程序的Profile工具
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- 如何在 Linux 下撰写程序来使用 I/O 端口
- 【转载】Linux下程序的Profile工具
- 如何使用Mondo救援故障恢复工具克隆和备份Linux系统