了解着色器阶段(尤其是GS)的性能影响

时间:2014-05-28 08:42:14

标签: opengl graphics glsl shader

我对在管道中执行的编码算法的速度比什么更慢而感到困惑。

我制作了一个程序,其中有一个似乎从fillrate中遇到瓶颈的程序,因为计时器查询显示它执行得更快,没有启用光栅化。

然后我使用变换反馈制作了一个不同的多次传递算法,每次仍然使用GS,但理论上通过分阶段执行总体上更少的工作,并且它显着降低了填充率,因为它渲染的三角形少得多,但是在我的早期测试中,它似乎运行得更慢。

我最初的想法是,填充填充的瓶颈是为了调用多个绘制调用的瓶颈。但真正的另一个抽奖电话有多贵? cpu和gpu涉及多少开销?

然后我读了the answer of a different stack question regarding the GS

  

没有人指责几何着色器是快速的。特别是在增加几何尺寸时。

     

你的GS正在划线,不仅要对顶点数据进行30倍放大,还要对每个新顶点进行光照计算。这不会非常快,很大程度上是由于缺乏并行性。每次GS调用都要进行60次照明计算,而不是让60个单独的顶点着色器调用并行进行60次照明计算。

     

您基本上在几何着色器中创建了一个巨大的瓶颈。

     

将片段着色器放入片段着色器可能会更快(是的,真的)。

这让我想知道如果几何着色器的使用提供了总体较少的工作输出,它们可能会变慢。我知道事情并行执行,但我的理解是只有相对较小的着色器核心组,因此启动比该组大得多的线程将导致瓶颈与程序复杂性(指令大小)时间成比例线程数(这里使用线程来引用着色器的调用)。如果你可以在几何着色器上每个顶点执行一次指令而不是每个片段执行一次,为什么它会变慢?

帮助我更好地理解,这样我就不会浪费时间设计效率低下的算法。

0 个答案:

没有答案