我正在使用OpenGL在C ++中开发一些程序性地形生成。作为IDE,我正在使用Microsoft VS2017。我可以毫无问题地运行“实验”。但经过大约两个小时的开发,该计划开始放缓。在十分钟左右的时间内,帧率从100以上下降到20.不久之后,我的GPU无法每秒渲染一帧。启动程序时,加载着色器并链接程序需要一段时间。
在VS2017中进行了一些调试和分析之后,结果发现超过98%的CPU等待GPU完成着色器统一操作。这包括找到统一变量的位置并将三个基质加载到均匀变量。
我尝试了各种不同的方法来改善情况,包括以下情况,但我无法在不重新启动电脑的情况下解决问题
如果这些信息对某人有帮助,请点击这里:
提前致谢, 利亚
答案 0 :(得分:2)
您的所有“问题排查”步骤都是伏都教。你使用哪个IDE无关紧要(无论如何它只是一个美化的编辑器)。在您的可执行文件驻留在文件系统中的哪个位置并不重要(它只是具有映射到操作系统的页面的存储设备块)。如果遇到热问题,降低GPU和/或内存时钟有助于稳定性,但不会影响这种蠕变性能问题(如果出现散热问题,您会在几分钟内注意到,而不是几小时)。
系统运行一段时间后性能突然下降几乎总是归因于资源耗尽,迫使系统交换数据。资源耗尽的原因是分配管理不当,即分配和再次释放之间的不平衡。
这是你必须调试的。对于OpenGL,每个glGen…
/ glCreate…
必须由匹配的glDelete…
进行平衡。对于代码中new
的每次使用,都必须保持平衡delete
(对于new …[]
,必须有delete[] …
。
如果您将对象推入容器(如std::vector
,std::list
,std::map
等),请确保您还执行垃圾,即丢弃不再使用的对象