OpenGL着色器制服变慢



问题

我正在使用OpenGL开发一些程序地形生成。作为IDE,我正在使用Microsoft VS2017。我可以毫无问题地运行"实验"。但是经过大约两个小时的开发,该程序减慢了。在十分钟左右的时间内,帧率从100多个下降到20。启动程序时,要加载着色器并链接程序需要永恒。

可能的原因

在VS2017内进行了调试和分析后,事实证明,超过98%的CPU正在等待GPU完成着色器统一的动作。这包括找到统一变量的位置并将三个矩阵加载到均匀变量。

故障排除步骤

我已经尝试了各种不同的事情来改善情况,包括以下情况,但是我无法在不重新启动计算机的情况下解决问题

  • 复制.exe和资产到另一个文件夹
  • 复制.exe和资产到另一个物理部门
  • 重新启动VS2017
  • 减少MSI Afterburner中的GPU和内存时钟
  • 检查图形卡VRAM用法
  • 紧密的背景应用程序

我的计算机

如果此信息对某人有所帮助,则是:

  • 英特尔©core©i5-6600k @3,5GHz
  • evga geforce GTX 1060 6GB GDDR5
  • MSI Z170-A Pro
  • 2x8GB DDR4-2133
  • Thermaltake 530W PSU
  • RAID1中的2x1TB HDD(在其上有项目(
  • 128GB SSD
  • 512GB HDD

预先感谢Elias

所有"故障排除"步骤都是Voodoo。您使用哪个IDE都没关系(无论如何,这只是一个荣耀的编辑(。在您的可执行文件中,在文件系统中的位置都没关系(它只是存储设备的块,页面映射到OS(。如果您遇到热问题,则减少GPU和/或内存时钟有助于稳定性,但不会影响这种蠕动的性能问题(如果存在热问题,您会在几分钟内注意到它,而不是小时(。

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

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

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

相关内容

  • 没有找到相关文章