【问题标题】:OpenGL Shader Uniform becomes slower [closed]OpenGL着色器均匀变得更慢[关闭]
【发布时间】:2017-11-30 18:55:32
【问题描述】:

问题

我正在使用 OpenGL 在 C++ 中开发一些程序地形生成。作为 IDE,我使用的是 Microsoft VS2017。我可以毫无问题地运行“实验”。但经过大约两个小时的开发后,程序变慢了。在十分钟左右的时间内,帧率从 100 多下降到 20。不久之后,我的 GPU 无法每秒渲染一帧。启动程序时,加载着色器和链接程序需要很长时间。

可能的原因

在 VS2017 中进行一些调试和分析后,事实证明,超过 98% 的时间 CPU 都在等待 GPU 完成着色器统一操作。这包括找到统一变量的位置以及将三个矩阵加载到统一变量中。

故障排除步骤

我尝试了各种不同的方法来改善这种情况,包括以下几种,但如果不重新启动计算机就无法解决问题

  • 将 .exe 和资产复制到另一个文件夹
  • 将 .exe 和资产复制到另一个物理设备
  • 重新启动 VS2017
  • 在 MSI Afterburner 中降低 GPU 和内存时钟
  • 检查显卡 VRAM 使用情况
  • 关闭后台应用程序

我的电脑

如果这些信息对某人有帮助,那就是:

  • Intel© Core© i5-6600K @3,5GHz
  • EVGA GeForce GTX 1060 6GB GDDR5
  • 微星 Z170-A PRO
  • 2x8GB DDR4-2133
  • Thermaltake 530W PSU
  • RAID1 中的 2x1TB 硬盘(上面有项目)
  • 128GB 固态硬盘
  • 512GB 硬盘

提前致谢, 埃利亚斯

【问题讨论】:

  • 没有看到MCVE,就不可能给你任何有意义的答案。

标签: c++ opengl graphics gpu


【解决方案1】:

您所有的“故障排除”步骤都是巫术。您使用哪个 IDE 并不重要(无论如何它只是一个美化的编辑器)。您的可执行文件驻留在文件系统中的哪个位置并不重要(它只是具有到操作系统的页面映射的存储设备块)。如果您遇到散热问题,降低 GPU 和/或内存时钟有助于提高稳定性,但不会影响这种缓慢的性能问题(如果有散热问题,您会在几分钟内而不是几小时内注意到它)。

系统运行一段时间后性能突然下降几乎总是归因于资源耗尽,迫使系统交换数据。资源耗尽的原因是分配管理不当,即分配和释放之间的不平衡。

这是你必须调试的。对于 OpenGL,每个 glGen…/glCreate… 必须由匹配的 glDelete… 平衡。对于代码中每次使用new,必须有一个平衡delete(对于new …[],必须有一个delete[] …)。

如果您将对象推入容器(如std::vectorstd::liststd::map 等),请确保您还进行了垃圾处理,即处理不再使用的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多