【问题标题】:Using XCode Instruments Time Profiler with optimization enabled使用启用优化的 XCode Instruments Time Profiler
【发布时间】:2012-06-28 08:58:53
【问题描述】:

我正在使用 C++ 进行一些数字运算,在我的调试版本中使用 -Os 优化时,我发现 CPU 百分比使用率存在巨大差异。因此,我想在启用优化的情况下分析我的代码,这样我就不会浪费时间优化编译器已经优化好的代码。

当我尝试使用 -Os 优化进行分析时,我无法让 Instruments 符号化我的代码(即使我手动指定了 .dSYM 文件的位置)。它甚至不会显示我没有模板化或内联的顶级 C++ 成员函数。

当我指定默认的-O0优化级别时,我可以让它很好地表示。

那么,是否可以在启用优化的情况下进行分析?如果是这样,那么让它发挥作用的诀窍是什么?

我正在使用 XCode 4.3.3。

【问题讨论】:

  • 我的评论是,一般来说,作为程序员,您将在比编译器更高的级别上进行优化,例如使用正确的数据结构、延迟加载或其他任何东西,而编译器将内联方法、展开循环等。所以我认为你不会在关闭编译器优化的情况下浪费时间进行优化,你不会优化与编译器相同的东西。
  • @JonoB:考虑这种情况(这与我的情况很接近)。在优化之前,在我最里面的循环中,StepA() 需要 100 毫秒,StepB() 需要 100 毫秒。优化后StepA()耗时10ms,StepB()耗时50ms。如果没有启用优化的分析信息,我怎么知道我应该把精力集中在StepB()
  • 您使用的是什么编译器/xcode 版本?我经常使用 -Os 或更高版本(在发布版本中)进行分析。
  • @EmileCormier 我猜你真的不知道。根据我的分析经验,瓶颈在哪里,编译器优化与否通常很清楚,但显然情况并非总是如此。

标签: iphone ios xcode profiling instruments


【解决方案1】:

Time Profiler 在使用-Os 时确实具有象征意义。优化器做得很好,我的 C++ DSP 代码被内联并加速到分析器不会在我让它运行的短时间内对其进行采样的地步。我在调用树中只能看到系统调用。

当我尝试运行探查器更长时间时,探查器捕捉到了我的 DSP 代码的一些亮点。它只显示了一些 NSOperationQueue 处理程序调用的顶级 DSP 函数。下面的其余部分似乎都是内联的。

当我使用-O2 编译时,我得到了更多有用的结果。我的更多 DSP 子程序保持原样(而不是内联),因此我能够更好地判断我的 DSP 算法在哪里花费时间。但这一切都没有实际意义,因为现在我可以看到该应用在管理系统调用上花费的时间比在我的 DSP 代码上花费的时间要多得多。

【讨论】:

  • 我不确定这是否应该是对我的问题的修改,而不是答案。
  • 我认为这对于其他遇到同样问题的人来说已经足够有用了。如今,编译器优化产生了如此巨大的变化,以至于分析比以前更加困难。
猜你喜欢
  • 2020-02-24
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 2011-07-27
  • 2015-01-10
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
相关资源
最近更新 更多