测量OpenGL指令执行时间

Posted by shensunbo on January 28, 2026

CPU和GPU的执行是异步的,CPU发出OpenGL指令后,并不会等待GPU执行完成,而是继续执行后续代码。因此,直接在CPU端测量OpenGL指令的执行时间是不准确的。

glFlush() vs glFinish()

方面 glFlush() glFinish()
作用 发送命令到 GPU 等待 GPU 完全完成
是否阻塞 CPU ❌ 不阻塞 ✅ 阻塞
返回时机 GPU 开始处理 GPU 完全完成
性能影响 高(可能卡顿)
使用场景 优化渲染 调试/测量

不同场景的最佳实践

场景 使用 glFlush() 使用 glFinish() 使用 glQueryCounter
正常渲染 ✅ 推荐 ❌ 会卡顿 ✅ 推荐
调试单帧性能 ❌ 不准确 ✅ 准确但卡 ✅ 准确不卡
优化 viewport 切换 ✅ 有效 ❌ 导致停顿 N/A
测量精确 GPU 执行时间 ❌ 误导 ⚠️ 可以但有代价 ✅ 最佳
在生产环境中持续测量 ❌ 可以但数据不准 ❌ 会严重降帧 ✅ 完美