【问题标题】:Understanding iPhone OpenGL Profiling了解 iPhone OpenGL 分析
【发布时间】:2011-08-10 16:49:12
【问题描述】:

我的应用程序已启动并正在运行,现在我希望提高渲染性能。使用“仪器”我收集了一些数据。我正在使用旧的 iPhone 3G 作为最坏的情况。

时间分析器:

-30%    CopyVertexElementsMultipleSequential
-11%    mach_msg_trap
-4%     _semwait_signal
-2%     ValidateState

但是使用 Open GL ES 驱动程序时,采样器会显示:

-70%    _semwait_signal
-24%    CopyVertexElementsMultipleSequential
-0.7%   mach_msg_trap

查看文档,我无法了解 OpenGL ES Sampler 和 Timer Profiler 之间的区别。谁能赐教?

【问题讨论】:

    标签: iphone opengl-es instruments


    【解决方案1】:

    首先,这只是您正在查看的采样器乐器。 OpenGL ES 驱动程序模板仅包含采样器仪器以及 OpenGL ES 驱动程序之一。它与 OpenGL ES 没有什么特别的关系。

    Sampler 仪器和 Time Profiler 的不同之处在于它们收集数据的方式。来自Instruments User Guide

    Time Profiler 仪器和 采样器仪器类似,但 有一些区别:

    • Time Profiler 以与 Shark 相同的方式收集回溯数据,从 内核空间。采样器,另一方面 手,从用户空间收集数据。 因此,Time Profiler 更 在收集方面比采样器高效 数据。

    • 注意:Time Profiler(和 Shark)可能会产生不准确的回溯数据,如果 目标进程被优化以省略 帧指针。

    • Time Profiler 可以从一个或所有进程收集数据。采样器只能 对单个进程进行抽样。

    • Time Profiler 可以仅对所有线程状态或正在运行的线程进行采样。 采样器总是对所有线程进行采样 状态。一般来说,你有兴趣 在运行线程中。当你的 应用程序已挂起,您想要 检查所有线程状态。

    我更喜欢自己使用 Time Profiler,并进行适当的数据挖掘,例如向调用者收取库或方法的费用。

    关于分析 OpenGL ES 应用程序,您首先需要查看可以在 OpenGL ES 驱动程序工具中启用的各种统计信息。单击仪器名称右侧的 i 以弹出一个弹出窗口,然后单击配置以显示您可以记录的可能统计数据列表。特别是,查看 Tiler Utilization 和 Renderer Utilization 统计数据。启用您想要的,返回上一个屏幕,然后单击复选框以确保它们已被记录。

    如果您的应用程序maxes out the Tiler Utilization stat,您将受到几何体大小的限制。尽你所能减少这种情况(使用我提到的一些技巧here),你会看到性能的显着提升。另一方面,如果你达到了渲染器利用率最大值,你的填充率就会受到限制,你可能需要关闭 MSAA,调整片段着色器(如果在 OpenGL ES 2.0 上),或者减小区域的大小除其他外,您正在渲染。

    除此之外,在运行 iOS 4.0 的设备上运行您的应用程序并使用 Xcode 4 附带的新 OpenGL ES Analyzer 工具。该工具非常适合在渲染代码中建议热点,或因冗余状态调用而浪费性能,等等

    查看您的特定跟踪数据,您似乎花费了大量时间将几何图形复制到 GPU。我会考虑使用顶点缓冲区对象 (VBO) 来显着减少这种情况。

    【讨论】:

    • 感谢您的回答。它已经帮了很多忙。我还有一个问题,但没关系:)
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多