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

Ghi*_*anc 6 ios scenekit

我正在尝试解决FPS中的丢弃问题.我发现Metal Flushes占用了大部分渲染时间.那是件好事儿吗?

SceneKit统计信息显示

Ped*_*lho 5

不确定这一点,因为Apple似乎没有记录究竟"金属冲洗"到底是什么,但我会根据之前的OpenGL经验回答:

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

因此,如果我的解释是正确的,那就意味着"金属冲洗"测量C​​PU等待视频内存释放的时间,以便它可以推送更多数据并向GPU请求操作.在这种情况下,它可能是好事还是坏事:

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

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

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