c - 如何找到图形管道的瓶颈

标签 c optimization opengl 3d graphic

我一直在想这个问题。如何找到图形管道的瓶颈。最近我一直在使用一个程序在一个带有 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/

相关文章:

mysql - 可以从MySQL删除中消除 "NOT IN"子查询吗?

c++ - Opengl - 渲染不同的顶点格式

c - 显示所有有符号短号码的程序

c - 精度考虑在 C 中如何工作?

Java 8 : Stream optimization, 在同一个实例上调用同一个方法两次

c++ - OpenGL - 矩阵逻辑错误

c++ - "vmath.h"是什么,在哪里?

c++ - #define 和 const 的分配

c - 读写文件内容10次

mysql - MySQL不使用LIMIT来优化查询选择功能吗?