Gprof:特定功能时间[重复]

2023-12-09

我想找出程序中特定函数所花费的时间。为此,我正在使用 gprof。我使用以下命令来获取特定函数的时间,但日志文件仍然显示程序中存在的所有函数的结果。请在这方面帮助我。

gprof -F FunctionName  Executable gmon.out>log 

你几乎在重复另一个问题是关于函数执行时间.

正如我回答的there,很难(由于硬件!)可靠地获得某些特定函数的执行时间,特别是如果该函数花费的时间很少(例如小于一毫秒)。你原来的问题指出这些方法.

我建议使用时钟获取时间(2) with CLOCK_REALTIME也许CLOCK_THREAD_CPUTIME_ID

gprof(1)(编译后-pg) 与简介(3)并正在使用sampling技术,基于发送SIGPROF信号(参见信号(7))以定期间隔(例如每 10 毫秒)从定时器设置设置定时器(2) and TIMER_PROF;因此程序计数器会定期采样。阅读维基页面gprof并注意分析可能显著地降低运行时间。

如果您的函数在短时间内(小于一毫秒)执行,则分析会给出不精确的测量(阅读有关海森巴格).

换句话说,分析和测量短时间运行函数的时间正在改变程序的行为(这也会发生在其他操作系统上!)。你可能必须give up测量的目标恰恰 and reliably and 准确您的活动时间不打扰它。它甚至可能不会产生任何precise感觉,例如因为CPU缓存.

你可以使用gprof没有任何-F参数,并在需要时对文本配置文件输出进行后处理(例如,使用GNU awk)来提取您想要的信息。

顺便说一句,特定功能的精确计时可能并不重要。重要的是标杆管理整个应用程序的。

您还可以要求编译器进一步优化您的程序;如果你正在使用链接时间优化,即编译和链接 with g++ -flto -O2,小函数的计时概念甚至可能不复存在(因为编译器和链接器可能在您不知情的情况下内联了它)。

还要考虑当前超标量处理器有如此复杂的微架构 with 指令流水线, caches, 分支预测器, 寄存器重命名, 投机执行, 乱序执行等等,对短函数进行计时的概念是未定义的。你无法预测或测量它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gprof:特定功能时间[重复] 的相关文章

随机推荐

  • Adobe Air Javascript API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 好吧 我觉得这是一个愚蠢的问题 但我在 Google 上确实找不到 Adob e AIR Javascript 的 API 我正在尝试访问文件系统和
  • Android 构建 apk 更改原始 png 文件

    最近 我从 SDK Tools r11 升级到 SDK Tools r16 后 某些设备出现了问题 我发现它与纹理相关 现在回顾我使用 SDK Tools r11 创建的 APK 文件 其中包含原始文件中纹理的精确副本 但是使用 SDK T
  • 在自定义 ArrayList 中仅添加一次项目

    我已经制作了自己的自定义 ArrayList 如下所示 public class Points String hoodName Double points Integer hoodId public Points String hN Dou
  • 在 R 中使用附加变量创建边列表

    我有这样的数据 ID c rep ID1 3 rep ID2 2 ID3 rep ID4 2 sex c rep male 3 rep female 2 female rep male 2 item c a b c a c a b a df
  • 无法创建 Facebook 应用程序

    第一次尝试创建 Facebook 应用程序 浏览到https developers facebook com apps它有一个在创建链接之前注册的链接 您只需接受条款和条件即可 现在它说 创建一个应用程序来启动 但是没有按钮可以单击来创建应
  • 专门使用 Github actions 为 iOS 构建 swift 包

    我有 iOS 应用程序的 swift 包 它需要UIKit跑步 我不想使用 Github 操作构建这个包 这就是我的工作流程 name Swift on push branches main pull request branches ma
  • 如何在 MVC 3 中将 WebForms .ascx 显示为部分视图

    我正在构建一个新的 ASP NET MVC 3 应用程序 在此应用程序中 我想在我的新 MVC razor 应用程序中的覆盖层中显示旧的 WebForms 用户控件 ascx ascx cs 作为部分视图 我在网上找不到任何有关执行此操作的
  • 静态链接与动态链接

    在某些情况下 是否有任何令人信服的性能原因来选择静态链接而不是动态链接 反之亦然 我听过或读过以下内容 但我对这个主题的了解还不够 无法保证其真实性 1 静态链接和动态链接之间的运行时性能差异通常可以忽略不计 2 如果使用使用配置文件数据来
  • 为什么我的打印函数将 () 和 "" 与语句一起打印?

    这是我针对绝对初学者 Python 编程挑战的代码 food input What is your favorite entree dessert input What is your favorite dessert print nI a
  • 使用可变模板参数构建枚举

    我有一个相当简单的变体类 它支持一组预定义的类型 并提供一个枚举来指示哪些可用类型当前处于活动状态 像这样的事情 class variant enum class type integer real string etc type acti
  • Eclipse 2023-06 突然不再自动完成“sysout”

    虽然我认识到这个问题之前已经被问过 但我尝试了多个不同线程的解决方案 但到目前为止还没有解决方案 5 天前 当我使用 Eclipse 时 我没有任何问题 现在到今天我突然无法使用 ctrl space 自动完成 sysout 据我所知 Ec
  • 在 C 中将数组作为参数传递

    我 认为我 明白 如果数组是在编译时在堆栈上声明的 则只能检索数组的大小 使用 sizeof 例如 int my array 1 2 3 sizeof my array 3 一旦你开始使用指针 你就会失去这个长度信息 例如如果将 int 指
  • 如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数?

    我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求 restTemplate getForObject apiRoot path object myObject Response
  • 当 DateTime 字段为 null 时,LINQ 中“指定的转换无效”

    我遇到问题了 我的代码使用 LINQ var resultCases from row2 in dtCases AsEnumerable where row2 Field
  • PHP 线程应该如何存储其数据?

    所以我一直在网上搜索和阅读有关 PHP pthreads3 以及它们应该如何存储数据的信息 或者更确切地说 他们不是 在我看来 线程正确存储其数据的唯一方法是创建一个新的 Threaded 对象并将其发送到线程 然后 线程可以使用此 Thr
  • UINavigationController 不弹出 UINavigationBar 项目

    我遇到一个问题 当 UINavigationController 弹出视图控制器时 我的 UINavigationBar 没有弹出它的项目 我查看了堆栈 观察到以下内容 分配的导航控制器的预期数量 在仪器中检查 堆栈上有正确数量的控制器 调
  • 如何在选中复选框的情况下克隆第一个框中的每个输入的输入?

    我想将每列的第一个输入的类型克隆 复制到同一类 id 的子框中 例如 有 5 列数据 每列都有自己的类和特定 ID 一旦我开始在每列的顶部输入上输入并选中复选框 该列的后续 子输入开始键入相同的笔划 JS var input1 docume
  • 由于twisted-iocpsupport,将 Django 应用程序部署到 Heroku 时出现问题

    我正在尝试将我制作的 Django 应用程序部署到 Heroku 上 最终弄清楚如何将其推送到 git 后 我 尝试这样做 git push heroku master 但随后它无法推送 因为它无法构建 twisted iocpsuppor
  • nginx 错误连接到 php5-fpm.sock 失败(13:权限被拒绝)

    我将 nginx 更新为1 4 7和 PHP 到5 5 12 之后我得到了502错误 在我更新之前一切正常 nginx 错误 log 2014 05 03 13 27 41 crit 4202 0 1 connect to unix var
  • Gprof:特定功能时间[重复]

    这个问题在这里已经有答案了 我想找出程序中特定函数所花费的时间 为此 我正在使用 gprof 我使用以下命令来获取特定函数的时间 但日志文件仍然显示程序中存在的所有函数的结果 请在这方面帮助我 gprof F FunctionName Ex