ios - Metal 多计算着色器与单计算着色器

标签 ios multithreading opengl-es metal metalkit

我正在运行多个(4 或 5 个)计算着色器来处理相同的数据并提供不同的输出。然而,用户可以启用其中的一个、一些或全部。从性能考虑我有两个选择:

  1. 将所有这些计算着色器合并为一个,并在一次通过中计算所有内容。然后根据用户输入,有选择地显示数据。这需要单次传递,但计算着色器的参数数量可能会增加(最多 8 个 MTLBuffer),

  2. 将它们拆分为多个着色器,并使用多个 channel 来计算每一个数据。每次传递都使用不同的计算命令编码器。

从性能角度来看,数据已驻留在 GPU 中的多次传递是否很糟糕?从性能考虑推荐哪个选项?

最佳答案

我希望选项 2 的性能一样好,除非每个着色器执行的计算有明显的重叠(即共享临时变量)。命令缓冲区的开销可以忽略不计。

您可以使用 Instruments 和“Metal System Trace”模板对此进行分析。它会告诉您每个内核执行了多长时间以及它们之间的间隔(内存复制、命令缓冲区排队等发生的地方)。如果选项 2 的配置文件显示大量未使用 GPU 的间隙,那么我错了,也许您需要做更少的遍数:)

关于ios - Metal 多计算着色器与单计算着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433279/

相关文章:

ios - 垂直翻转 PVRTC 压缩图像数据

iphone - Facebook 登录让我每次都已经授权这个应用程序

ios - 使用 renderInContext 添加 UILabel 到 UIImage

java - 线程需要等待列表更新

java - 每 X 秒重新加载一次 JPanel(使用线程?)

c++ - 从视频纹理中选择源矩形

ios - iOS6 的 UITableViewStylePlain 和 iOS 7 的 UITableViewStyleGrouped

ios - 单击后 UITableViewCell 调整大小,约束发生变化

c++ - 什么是线程中的关键部分

java - Libgdx 中的简单 OpenGL ES 着色器输出是白色应该是红色