我一直在想这个问题。如何找到图形管道的瓶颈。最近我一直在使用一个程序在一个带有 alpha 混合的简单场景(又名草场景)中绘制大量多边形。我用过两个程序,一个使用静态坐标,另一个使用旋转和平移。两者都以 60 FPS 的速度运行,没有其他繁重的进程在运行。但是当我一起使用它们时(两个窗口每个都有相同数量的草和草位置)使用平移和旋转的一个以 10 FPS 的速度运行,而另一个大约为 55 FPS。我的问题是为什么两者都以 60 FPS 的速度运行,当发生这种情况时,为什么第二个(每根草的旋转和平移)下降了大约 50 FPS 但第二个仍然是 55?对我来说听起来像是一个瓶颈。如果您有任何想法请告诉我,或者如果您有关于查找 GPU(或 GPGPU)瓶颈或优化在 GPU 上运行的图形代码的想法或论文,请提供更一般的答案?
最佳答案
您的问题实际上不是 GPU 上的瓶颈,也不是您的程序的瓶颈,而是驱动程序中的瓶颈。 glRotate 和 glTranslate 会导致大量上下文切换到驱动程序模式,从而降低性能。您几乎没有把所有时间都浪费在簿记上,而没有提高工作效率。
引入了实例化来缓解您遇到的这个特殊问题。
要回答如何分析图形管道,有许多工具可以帮助您:
gDEBugger http://www.gremedy.com/
NVPerfkit http://developer.nvidia.com/nvidia-perfkit
GPU 性能工作室 http://developer.amd.com/tools/PerfStudio/Pages/default.aspx
它还有助于在您的程序中收集一些统计数据,主要是关于昂贵调用的顺序和数量(主要是切换着色器、纹理)。
关于c - 如何找到图形管道的瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136098/