金属多个计算着色器与单个

时间:2018-05-20 09:11:16

标签: ios multithreading opengl-es metal metalkit

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

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

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

  3. 从性能角度来看,数据已经存在于GPU中的多次传递是不是很糟糕?从性能考虑推荐哪个选项?

1 个答案:

答案 0 :(得分:1)

除非每个着色器执行的计算(即共享临时值)存在重大重叠,否则我希望选项2的执行效果一样好。命令缓冲区的开销几乎可以忽略不计。

您可以使用仪器和"金属系统跟踪"模板。它将告诉您每个内核执行的时间和它们之间的间隔(内存复制,命令缓冲区排队等等)。如果选项2的配置文件显示了大量没有使用GPU的间隙,那么我错了,也许你需要做更少的传递:)