SceneKit统计信息显示中的“Metal Flush”是什么?

时间:2016-10-04 14:54:10

标签: ios scenekit

我正在尝试对FPS中的丢弃进行故障排除。我发现Metal Flushes占用了大部分渲染时间。这是件好事吗?

SceneKit stats display

1 个答案:

答案 0 :(得分:5)

不确定关于这一点,因为Apple似乎没有记录究竟“Metal Flush”到底是什么,但我会根据之前的OpenGL经验回答:

在GPU驱动的应用程序的执行周期中,CPU会将数据推送到GPU,等待GPU完成对此数据的操作(可能在此期间执行其他工作),并且只要GPU是完成后,推送更多数据并请求更多操作。通常,“刷新”意味着CPU正在等待GPU完成操作(“清除旧数据”),以便它可以将更多数据推送到GPU。

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

CPU和GPU之间总会有一些通信开销,所以如果你的大部分渲染时间被“Metal Flush”占用,那么这可能意味着你的应用程序运行得足够快,大部分延迟帧之间只是通信开销。在那种情况下,这将是一件好事。

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

最后,重要的是确保您的FPS一直很高。如果您的FPS因“金属冲洗”而下降,您可能想要尝试将数据传输空间化 - 例如,以块的形式存储纹理和/或使用较低分辨率的纹理可能有助于此。