gpt4 book ai didi

c++ - libGL 堆使用

转载 作者:IT王子 更新时间:2023-10-29 01:17:19 27 4
gpt4 key购买 nike

我正在使用 Nvidia 290.10 64 位驱动程序开发基于 linux 的 c++ OpenGL 应用程序。我正在尝试减少它的内存占用,因为它使用了大量的实时数据。

我一直在使用 valgrind/massif 来分析堆使用情况,虽然它帮助我优化了各种东西,但现在使用的最大堆内存块是由 libGL 分配的。无论我如何设置阈值,massif 都不让我详细了解这些分配的来源,只是它是 libGL。在高峰时段,我看到 libGL 分配了大约 250MB(总堆使用量为 900MB)。我在显卡上拥有类似数量的内存,如 VBO 和纹理(主要是一个大的 4096*4096 纹理)。

所以看起来好像 libGL 在堆上分配了与我上传到 GPU 内存的内存量相似的内存量。当 VBO 的容量达到峰值时,libGL 分配也会达到峰值。那是正常的吗?我认为拥有大量 GPU 内存的好处之一是它可以保持 RAM 空闲?

最佳答案

您遇到的情况是完全正常的,因为出于各种原因,OpenGL 实现必须在系统内存中保留一份数据拷贝。

在 OpenGL 中,没有对 GPU 的独占访问,因此根据其用途,可能需要换出数据(或只是从 GPU 内存中释放一些对象)。此外,GPU 可能会崩溃,然后驱动程序会在用户不注意的情况下静默重置它们。这也需要所有缓冲区数据的完整拷贝。

不要忘记地址空间分配(Valgrind 报告的值)和实际内存利用率之间存在重大差异。

关于c++ - libGL 堆使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10698125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com