2013-03-03 63 views
1

我应该避免在opengl着色器中做过多的计算吗?在opengl的着色器中应该做多少工作?

例如:需要每帧计算的东西,如照明。我应该如何进行计算,然后将结果发送给着色器,还是只应在着色器中进行计算?

+5

我该如何记住它应该在GPU上完成的任何并行化操作,任何顺序操作都应该在CPU上完成。 – Patashu 2013-03-03 23:55:50

+0

还要考虑有多种类型的着色器;通常在顶点着色器中发生一些照明,并且结果使用片段着色器。 – Dithermaster 2013-03-04 00:20:42

+5

这个问题太广泛,无法回答。你在哪里进行哪些计算取决于计算的内容,在其他地方做什么的视觉效果等等。这不是你可以给出的一般建议。 – 2013-03-04 00:24:49

回答

5

GPU vs CPU是一个巨大的讨论话题,正如@Nicol Bolas指出的那样,问题是寻找一个通用的解决方案,其中多种因素会影响结果。

当考虑性能时,没有什么比击败分析。人类在预测其应用程序的性能影响方面出人意料地不好。如果在开发过程中您注意到您突然遇到GPU绑定,那么您可能需要将一些工作卸载到CPU。另一方面,如果你受限于CPU,你可以选择将更多的工作卸载到GPU上,即使这些工作与图形无关。通过给GPU提供你可以做的事情(特别是如果它是与图形相关的),你很可能会想要开始释放你的CPU周期。

你可以阅读更多的关于NVIDIAAMD开发者网站剖析的GPU或通过搜索GPU剖析教程/博客文章,如this

GPGPU已经成为并行编程领域的主要讨论话题,因为GPU在设计时考虑了并行性。使用诸如SLI之类的技术将多个GPU添加到系统以进一步并行处理也是很常见的。这是@ Pataro的支持GPU并行处理的评论原则之一。如果您有兴趣了解更多信息,您可以挖掘两种更流行的基于GPU的并行编程平台OpenCLCUDA

主题也是在以下职位讨论多一点:

这也将是在读了一个好主意GPU gems系列等出版物。你很可能会发现其他人分担工作量的结果。