【问题标题】:What are "Metal Flush" in the SceneKit stats display?SceneKit 统计显示中的“Metal Flush”是什么?
【发布时间】:2017-02-12 19:25:55
【问题描述】:

我正在尝试解决 FPS 下降问题。我看到 Metal Flushes 占用了大部分渲染时间。这是好事吗?

【问题讨论】:

  • 你弄明白了吗?
  • 有点...通过减小纹理的大小和分辨率,我在该部门得到了显着改善。所以我想我们可以得出结论,“Metal Flush”是将图像数据从主内存传输到视频内存或其他东西。
  • 但即使是一个没有任何东西的全黑场景也需要 5-6 毫秒
  • 我确信至少总会有一些开销......我真的希望 Apple 能更好地记录这一点,这样我们就可以得到关于什么是 Metal Flush 的真正答案。
  • 在我的 Metal Flush 上大约需要 100 毫秒(在设备上)。我正在为此提供赏金。

标签: ios scenekit


【解决方案1】:

对此我不确定,因为 Apple 似乎没有记录任何地方的“金属冲洗”到底是什么,但我会根据之前使用 OpenGL 的经验来回答:

在 GPU 驱动的应用程序的执行周期中,CPU 会将数据推送到 GPU,等待 GPU 完成对这些数据的操作(可能同时做其他工作),并且一旦 GPU完成,推送更多数据并请求更多操作。通常,“刷新”意味着 CPU 正在等待 GPU 完成操作(“刷新旧数据”),以便它可以将更多数据推送到 GPU。

所以,如果我的解释是正确的,那就意味着“金属刷新”测量 CPU 等待视频内存释放的时间,以便它可以向 GPU 推送更多数据和请求操作。在那种情况下,这可能是好事也可能是坏事:

CPU 和 GPU 之间总会有一些通信开销,因此如果您的大部分渲染时间都被“Metal Flush”占用,这可能意味着您的应用程序运行得足够快以至于大部分延迟帧之间只是通信开销。那样的话,倒是件好事。

另一方面,您可能会将大量数据推送到 GPU,而复制数据和处理数据所需的时间可能会导致延迟。在那种情况下,这将是一件坏事。

最后,重要的是确保您的 FPS 始终保持较高水平。如果您的 FPS 由于“Metal Flush”而下降,您可能需要尝试将数据传输间隔开 - 例如,将纹理存储在块中和/或使用较低分辨率的纹理可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2011-01-21
    • 1970-01-01
    • 2016-04-13
    • 2018-04-16
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多