【笔记】 使用GNU profiler查找性能瓶颈,查看代码中每个函数所消耗的时间

OS: ubuntu 12.04

在ubuntu linux下调试C++代码时,我们很可能想要查看每个函数的运行时间,找到代码的性能瓶颈,以便加以修缮。我在师兄的引导下在github中学到了以下这个方法,很受用。

我们使用的是GNU profiler。 具体方法是:(假设现在想编译的代码文件是main.cpp)

  • 编译时添加-pg    比如:    g++ -c -pg main.cpp
  • ./main运行,结束时会生成gmon.out
  • gprof ./main gmon.out | less 查看

参考文献:

https://github.com/roles/deep_learning

  感谢作者和开源的世界~

时间: 2024-11-03 22:32:07

【笔记】 使用GNU profiler查找性能瓶颈,查看代码中每个函数所消耗的时间的相关文章

Eclipse查看git中的历史,显示详细时间

clipse show date details in git history我的eclipse查看git history,显示为相对时间,并不是很方便,想要查看某个具体日期的版本代码,就需要设置为具体时间了.下面是解决方法:1.右键 --> team --> show in history --> 下拉的小三角 --> show --> Relative Dates取消Relative Dates的勾选. 2.Window --> Preferences -->

在Android源码中查找Java代码中native函数对应的C++实现

Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名找到其对应的C++实现,有两个方法. 先来个java代码的示例VMThread.java: package java.lang; class VMThread { Thread thread; int vmData; VMThread(Thread t) { thread = t; } native

QEMU代码中os_daemonize()函数的理解

之前是做几年的Windows c++开发,Linux下的经验不够丰富,导致我在看QEMU代码时,有些地方还需要回头学习Linux操作系统的实现机制才能更准确理解.学习Linux操作系统时泛泛地看了很多书籍,好像明白了,但是要深刻理解,以这平庸的智商我觉得还是要多看代码多码代码.闲话少说,来看下os-posix.c中的一个函数,叫os_daemonize(),从名字上我们就知道是要搞一个守护进程,代码如下: void os_daemonize(void) { if (daemonize) { pi

程序代码中退出函数exit()与返回函数return ()的区别

  exit(0):正常运行程序并退出程序:   exit(1):非正常运行导致退出程序:   return():返回函数,若在主函数中,则会退出函数并返回一值.  解析: 1. return返回函数值,是关键字: exit 是一个函数. 2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它表示了一个进程的结束. 3. return是函数的退出(返回):exit是进程的退出. 4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的).ex

Python使用inspect查看代码参数

使用import inspect查看python 类的参数和模块.函数代码 文件就是最小的模块,文件夹是比较大的模块. 文件里面可以包含类,函数. 函数可以执行一个操作,多个函数组合在一起可以写为一个模块,根据不同事物写成一个类,这个类包含几个行为写成几个类内的函数,也可以将这些作为一个文件. 主要步骤是将文件路径设置到系统,再将文件作为模块引入,再开始查看文件里面的内容. 首先,写了一个函数 def h(): print "hello" def hm(m,k): print m, k

C#代码与JAVASCRIPT函数的相互调用

问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在C#中访问JavaScript函数? 问题1答案如下:javaScript函数中执行C#代码中的函数:方法一:1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中;        2.在前台写一个js函数,内容为document.getElementById("btn1").click();        3.

使用 GNU profiler 来提高代码运行速度

各种软件对于性能的需求可能会有很大的区别,但是很多应用程序都有非常严格的性能需求,这一点并不奇怪.电影播放器就是一个很好的例子:如果一个电影播放器只能以所需要速度的 75% 来播放电影,那么它几乎就没什么用处了. 其他应用程序(例如视频编码)如果是耗时非常长的操作,最好以 "批处理" 任务的方式运行,此时启动一个作业,让其一直运行,然后我们就可以去干别的事情了.尽管这些类型的应用程序没有这种硬性性能指标的限制,但是提高速度仍然会带来很多好处,例如可以在给定的时间内可以对更多电影进行编码

IOS笔记 #pragma mark的用法和作用(方便查找和导航代码)

简单的来说就是为了方便查找和导航代码用的. 下面举例如何快速的定位到我已经标识过的代码. #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick{ //... } OK,那么如何查找呢,点击代码编辑器上面的导航栏即可: 接着我修改一下代码: #pragma mark - 播放节拍器 猛一看没发现区别是吧?实际上多了一个横线 #pragma mark “-” 播放节拍器 这个短横线(减号)有什么作用呢,再次点击导航栏就可以看到. 加上-后会显示一条分割线会

IOS性能调优系列:使用Time Profiler发现性能瓶颈

硬广:<IOS性能调优系列>第五篇,预计会有二十多篇,持续更新,欢迎关注. 之前四篇都是关注于内存方面,分析了内存泄漏.僵尸对象.内存分配,本篇介绍Time Profiler工具的使用,开始真正的“性能”调优之旅. Time Profiler还有之前介绍过的Leaks.Allocations工具,被戏称为Instruments的救命三招,是当应用遇到问题时首先应当使用的三个工具. Time Profiler帮助我们分析代码的执行时间,找出导致程序变慢的原因,告诉我们“时间都去哪儿了?”. 在使