如何找到图形管道的瓶颈

时间:2011-05-26 09:04:09

标签: c optimization opengl 3d graphic

我一直想知道这个问题。如何找到图形管道的瓶颈。最近我一直在使用一个程序在一个简单的场景中使用alpha混合(AKA草场景)绘制大量的多边形。我使用了两个程序,一个使用静态坐标,另一个使用旋转和平移。两者均以60 FPS运行,没有其他重型进程在运行。但是当我一起使用它们时(两个窗口各有相同数量的草和草位置),使用平移和旋转的那个以10 FPS运行但另一个约为55 FPS。我的问题是为什么两个都运行@ 60 FPS并且当这样的事情发生时为什么第二个(每个草的旋转和平移)下降大约50 FPS但第二个仍然是55?对我来说听起来像瓶颈。如果您有任何想法,请通知我,如果您有关于发现GPU(或GPGPU)瓶颈的想法或论文,或者优化用于在GPU上运行的图形代码,请通知我们?

1 个答案:

答案 0 :(得分:5)

你的问题实际上不是GPU上的瓶颈,也不是你的程序,而是驱动程序中的瓶颈。 glRotate和glTranslate导致许多上下文切换到驱动器模式,从而消耗性能。你一直在小心浪费在簿记上而不是工作效率。

引入了

Instancing 来缓解您遇到的这个特殊问题。

要回答如何分析图形管道的问题,有许多工具可以帮助您:

gDEBugger http://www.gremedy.com/

NVPerfkit http://developer.nvidia.com/nvidia-perfkit

GPU Perf Studio http://developer.amd.com/tools/PerfStudio/Pages/default.aspx

此外,您还可以在程序中收集一些统计信息,主要是关于昂贵调用的顺序和数量(切换着色器,主要是纹理)。