在opengl中着色器应该做多少工作?

时间:2013-03-03 23:51:34

标签: c++ c opengl glsl shader

我应该避免在opengl的着色器中进行多余的计算吗?

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

1 个答案:

答案 0 :(得分:5)

GPU与CPU是一个讨论的主题,正如@Nicol Bolas所指出的那样,问题是寻找一个通用的解决方案,其中有很多因素会影响结果。

在考虑性能时,没有什么能比分析更好。众所周知,人类在预测其应用程序的性能影响方面表现不佳。如果在开发过程中你注意到你突然受到GPU限制,那么你可能想要将一些工作卸载到CPU。另一方面,如果您受CPU限制,您可以选择将更多工作卸载到GPU,即使该工作与图形无关。很可能你会想要通过为GPU提供尽可能多的东西(特别是如果它与图形相关)来释放你的CPU周期。

您可以阅读更多关于在NVIDIAAMD开发者网站上分析GPU的信息,或者搜索GPU分析教程/博客帖子,例如this

GPGPU已经成为并行编程领域讨论的一个主要话题,因为GPU的设计考虑了并行性。使用诸如SLI之类的技术向系统添加多个GPU以进一步并行化处理也并不罕见。这是@ Patashu评论赞成GPU并行处理的原则之一。如果您有兴趣了解更多信息,可以深入了解两个更受欢迎的基于GPU的并行编程平台OpenCLCUDA

以下帖子还讨论了这个主题:

在其他出版物中阅读GPU gems系列也是一个好主意。您可能会发现其他人在分配工作量时所获得的结果。