我正在寻找一些JOGL类/方法/示例来检索总可用GPU内存的大小和当前可用的GPU内存。
我知道可以使用OpenGl(JOGL Java docs)完成。
答案 0 :(得分:2)
您发布的链接使用NVidia专有扩展程序。然而,考虑到现代GPU的运行方式,知道多少内存和#34;绝对没用。还有。为什么呢?
因为OpenGL总是在抽象内存模型上运行。单个数据对象(纹理,VBO)可能太大而无法容纳到GPU的工作内存中,但除了系统内存(CPU RAM)之外,您可以拥有的纹理和VBO数量几乎没有限制。 OpenGL总是按需交换内容。
自从OpenGL-4 / DirectX-11支持的GPU出现了集成MMU之后,即使数据对象大小的概念变得毫无意义。今天的GPU支持稀疏数据对象。在现代GPU上,您可以分配几千个像素宽和高的纹理,并且只能用数据稀疏地填充它们。因此,即使只绑定了一个纹理对象,它的一部分也可能在系统内存中处于休眠状态,而其他部分则处于GPU工作内存中。
旧的OpenGL实际上有查询纹理是否加载到快速内存中的函数。但随着GPU和系统RAM之间的界限消失,那些已经不再有意义的东西随后被删除了。
现在有效的GPU RAM是一个缓存,你应该这样对待它。除了非常特殊的应用程序之外,您几乎不会在运行时查询CPU缓存的大小。