2016-10-04 55 views
6

我正在尝试排查FPS中的滴剂。我看到金属冲洗是占用大部分渲染时间的原因。那是件好事儿吗?什么是SceneKit统计信息显示中的“金属冲洗”?

SceneKit stats display

+0

你明白了吗? – ColdSteel

+0

排序...我通过减少纹理的大小和分辨率在该部门取得了戏剧性的改进。所以我想我们可以得出结论:“金属冲洗”是将图像数据从主存储器传输到视频内存或其他东西。 –

+0

但即使是一个没有任何东西的整个黑色场景也需要5-6毫秒 – ColdSteel

回答

5

不知道关于这一点,因为苹果似乎并没有已经证明完全是“金属冲”是在任何地方什么,但我会回答基于OpenGL的以往的经验:

在GPU供电的应用程序的执行周期中,CPU会将数据推送到GPU,等待GPU完成对该数据的操作(可能在此期间进行其他工作),并且一旦GPU完成,推送更多数据并请求更多操作。通常情况下,“刷新”意味着CPU正在等待GPU完成操作(“刷新旧数据”),以便将更多数据推送到GPU。因此,如果我的解释是正确的,那将意味着“金属冲洗”测量C​​PU等待视频内存释放的时间,因此它可以将更多数据和请求操作推送到GPU。在这种情况下,它可能是件好事或坏事:

CPU和GPU之间总会有一些通信开销,所以如果大部分渲染时间被“Metal Flush”占用,这可能意味着您的应用程序运行得足够快,以致帧之间的大部分延迟只是通信开销。在那种情况下,这将是一件好事。另一方面,您可能会向GPU推送大量数据,复制数据和处理数据所需的时间可能会导致延迟。在那种情况下,这将是一件坏事。

最终,这里最重要的是确保您的FPS一直很高。如果您的FPS由于“金属冲洗”而下降,您可能想尝试隔离数据传输 - 例如,以大块方式存储纹理和/或使用较低分辨率纹理可能有助于实现这一点。

相关问题